829. Consecutive Numbers Sum

碼農老哥發表於2021-01-02

Lc-829

829. Consecutive Numbers Sum

題目大意:

給定一個正整數N,問有多少種連續整數的組合相加為N。
for example:N = 5, 5 = 5 = 2 + 3, so answer is 2

解題思路:

首先,最小的兩個連續正整數相加1+2=3,
大點的就是2+3=5=1+2+2,再大點3+4=7=2+3+2=1+2+(2+2),
從中可以看出如果存在兩個連續正整數之和等於N,
那麼必然N=1+2+2k(k為正整數),N-(1+2)可以整除2,即(N-(1+2))%2 == 0.
往下推,n個連續正整數就是,(N-(1+2+...+n))%n == 0

注意:

None

複雜度:

Time Complexity: 
Space Complexity: 

Code示例:

class Solution {
    public int consecutiveNumbersSum(int N) {
        int ans = 1, sum = 1;
        //一個連續正整數即N本身,我們從2開始逐一判斷,true則加1
        for (int i = 2; (sum+=i)<=N; i++) {
            if ((N-sum) % i == 0) ans++;
        }

        return ans;
    }
}

相關文章