LeetCode 829 连续整数求和

题目链接: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;
    	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值