LeetCode 829. 连续整数求和
题目描述
思路分析
解法一:枚举长度(推荐)
核心思路:
- 若长度为
k,则有n = k * x + k * (k - 1) / 2。- 只要
n - k*(k-1)/2为正且能被k整除,就存在解。- 枚举所有可能的
k统计方案数。
复杂度分析:
- 时间复杂度:O(\sqrt{n}),其中 n 表示给定整数。
- 空间复杂度:O(1),仅使用常数额外空间。
class Solution {
public int consecutiveNumbersSum(int n) {
int ans = 0;
for (long k = 1; k * (k - 1) / 2 < n; k++) {
long remain = n - k * (k - 1) / 2;
if (remain % k == 0) {
ans++;
}
}
return ans;
}
}
func consecutiveNumbersSum(n int) int {
ans := 0
for k := int64(1); k*(k-1)/2 < int64(n); k++ {
remain := int64(n) - k*(k-1)/2
if remain%k == 0 {
ans++
}
}
return ans
}
相似题目
| 题目 | 难度 | 考察点 |
|---|---|---|
| 279. 完全平方数 | 中等 | 数学 |
| 343. 整数拆分 | 中等 | 数学 |
| 633. 平方数之和 | 中等 | 数学 |
| 367. 有效的完全平方数 | 简单 | 数学 |
| 69. x 的平方根 | 简单 | 数学 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!