829. Consecutive Numbers Sum
Given a positive integer N, how many ways can we write it as a sum of consecutive positive integers?
Example 1:
Input: 5
Output: 2
Explanation: 5 = 5 = 2 + 3
Example 2:
Input: 9
Output: 3
Explanation: 9 = 9 = 4 + 5 = 2 + 3 + 4
Example 3:
Input: 15
Output: 4
Explanation: 15 = 15 = 8 + 7 = 4 + 5 + 6 = 1 + 2 + 3 + 4 + 5
Note: 1 <= N <= 10 ^ 9.
Approach
- 题目意思很明显就直接讲思路,直接枚举是不行的,我们要用到等差数列求和公式
Sn=n*(n-1)/2+a*n
计算,因为每个连续和等于N的长度一定是不同的,通过这个性质,我们可以枚举数列长度,查找a
是否存在。4ms
Code
class Solution {
public:
int consecutiveNumbersSum(int N){
int cnt = 0;
for (int i = 1; i <= N; i++) {
int a = i*(i - 1) / 2;
if (a >= N)break;
int num = N - a;
if (num%i == 0)cnt++;
}
return cnt;
}
};