发布时间:2023-08-07 19:30
每日一题做题记录,参考官方和三叶的题解 |
class Solution {
public int consecutiveNumbersSum(int n) {
int res = 0;
n *= 2;
for(int k = 1; k * k < n; k++) {
if(n % k != 0)
continue;
if((n / k - (k - 1)) % 2 == 0)
res++;
}
return res;
}
}
class Solution {
public:
int consecutiveNumbersSum(int n) {
int res = 0;
n *= 2;
for(int k = 1; k * k < n; k++) {
if(n % k != 0)
continue;
if((n / k - (k - 1)) % 2 == 0)
res++;
}
return res;
}
};
- 1个数时,必然有一个数可构成N
- 2个数若要构成N,第2个数与第1个数差为1,N减掉这个1能整除2则能由商与商+1构成N
- 3个数若要构成N,第2个数与第1个数差为1,第3个数与第1个数的差为2,N减掉1再减掉2能整除3则能由商、商+1与商+2构成N
- 以此类推,当商即第1个数小于等于0时结束
impl Solution {
pub fn consecutive_numbers_sum(n: i32) -> i32 {
let mut res = 0;
let mut k = 1;
let mut n = n;
while n > 0 {
n -= k;
if n % k == 0 {
res += 1;
}
k += 1;
}
res
}
}
数学理论分析更重要的题。
欢迎指正与讨论! |