题解 | #和为S的连续正数序列#

和为S的连续正数序列

https://www.nowcoder.com/practice/c451a3fd84b64cb19485dad758a55ebe

1.遍历,当从1开始到i的和超过sum时,中断。

2.取sum/i的平均值,如果符合题意,则一定在平均值的附近。

3.从平均值向前取整数值i个,求和为sum_tp。

4.如果sum与sum_tp的差值是i的整数倍,则符合题意,将构成sum_i的i个元素向后递增(sum - sum_tp) // i,得出符合题意的一组分配方案。

5.由于分组是从少到多,则方案是递减的,倒序输出即可。

class Solution:
    def FindContinuousSequence(self, sum: int):
        list_a = []
        for i in range(2, sum):
            if i * (i + 1) // 2 > sum:
                break
            avg_i = sum // i
            sum_tp = (avg_i + avg_i - i + 1) * i // 2
            if (sum - sum_tp) % i == 0:
                list_i_low = [avg_i - j + (sum - sum_tp) // i for j in range(i)][::-1]
                list_a.append(list_i_low)
        return list_a[::-1]

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-10 14:10
啊啊啊啊好幸福,妈妈是我找工作发疯前的一束光
榕城小榕树:你是我见过最幸福的牛客男孩
点赞 评论 收藏
分享
06-08 22:25
门头沟学院 Java
从零开始的转码生活:这hr不会打开手机不分青红皂白给所有人群发这句话,过一会再给所有人再发一遍,这肯定会有重复的,不管,再过一会再发一遍
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务