题解 | #和为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]

全部评论

相关推荐

牛客175617325号:有的面试官不开摄像头 可能是因为他是竞业来的
点赞 评论 收藏
分享
头像
09-29 16:18
门头沟学院 Java
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务