题目链接:829连续整数求和
题意:
给定一个正整数 N
,试求有多少组连续正整数满足所有数字之和为 N
?
例如:
15
1+2+3+4+5 = 4 + 5 + 6 = 7 + 8 = 15 = 15 有4组
解题思路
我能想到的方法就是循环,显然会超时,就是从1开始,往后加,直到 大于或等于N,然后下一次循环。
看到大神的解法,震惊!
认真理解:
(1)N一定有一个是自己本身。 (毫无疑问)
(2)两个数要构成 N , 那么第一个数与第二个数的差 为 1,如果 N减掉这个1能整除2 则能由商与商+1构成N。说明会有一组
(3)三个数要构成N, 那么第一个数与第二个数的差为1,第三个数与第一个差为2 ,如果 N 减掉1 + 2能整除 3, 那么能够由商与商+1,商+2构成 N
(4).............
代码:
class Solution {
/**
* @param Integer $N
* @return Integer
*/
function consecutiveNumbersSum($N) {
$ans = 0;
for($i = 1; $N > 0; $i++){
if($N % $i == 0){
$ans++;
}
$N = $N - $i;
}
return $ans;
}
}