连续子序长度为1的子序和:1,2,3,4,5,6,7,8,9,10。。。。 d = 1
连续子序长度为2的子序和:3,5,7,9,11,13,15,17,19。。。 d = 2
连续子序长度为3的子序和:6,9,12,15,18,21,24,27,30。。。 d = 3
观察发现,都是等差序列,如果子序长度为d,那么首项s1 = 1+2+..+d
如果n出现在等差序列中,那么(n - s1) % d == 0
因此,枚举d,如果(N-s1)%d=0,计数器加1,边界条件是s1 < N
class Solution {
public:
int consecutiveNumbersSum(int N) {
//连续子序长度为1肯定是
int s1 = 1, d = 2, res = 1;
while(s1 < N)
{
s1 += d;
if((N - s1) % d == 0) res++;
d++;
}
return res;
}
};