829. Consecutive Numbers Sum------穷举法

一、审题

求一个数字可以由几种连续的正整数表示

ex: 9=9=4+5,9有两种表示

15 = 15 = 8 + 7 = 4 + 5 + 6 = 1 + 2 + 3 + 4 + 5

有四种表示方式

二、解题思路

首先题目要求在把所有的解找出来,首先想到穷举法,把可能的情况全部遍历一遍如果符合条件则计数++

连续的整数即为等差数列,所以我们有等差数列求和公式可以用

N=(i+1)i/2+(i+1)a

确定穷举因素(等差数列的长度为我们要枚举的因素),我们不妨穷举长度方式从1开始一直到N。

for i in range(0,N)

每个i通过判读是否有对应的正整数a来确定符合题意(我们只需确定等差数列的长度,然后利用N-(i+1)*i/2得到的值,然后除以数列长度,若能整除则说明存在这个数列,若不能正常则不存在这个数列。

源代码如下:

re=N-(i+1)*i/2

通过分析 i*(i+1)/2<N -->  i<sqrt(2*N) 缩小循环次数

import math
class Solution(object):
    def consecutiveNumbersSum(self, N):
        """
        :type N: int
        :rtype: int
        """
        result=0
        temp=int(math.sqrt(2*N))
        for i in range(0,temp):
            res=N-(i*(i+1)/2)
            if res%(i+1):# 如果不能整除说明不符合条件
                continue
            if res/(i+1)>0:# 开始的数字大于0
                result+=1
        return result

 

转载于:https://www.cnblogs.com/zydxx/p/9709470.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值