zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    ubuntu18.04阿里源
    C# 去开头字符串
    思维导图 电商运营思路
    思维导图 淘宝淘宝流量来源
    学习 名词
    Java面试题之“==”和“equals()”方法的区别?
    修改本地MySQL的root身份密码
    添加并启动MySQL服务
    在centos7上进行hadoop-3.1.2的伪分布搭建
    TreeMap树映射取出对象的方式
  • 原文地址:https://www.cnblogs.com/zydxx/p/9709470.html
Copyright © 2011-2022 走看看