LeetCode 829. 连续整数求和

题目描述

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 的平方根 简单 数学
本文作者:
本文链接: https://hgnulb.github.io/blog/2025/62797737
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!