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