输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。
序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
示例 1:
输入:target = 9
输出:[[2,3,4],[4,5]]
考虑用两个数i,j分别表示序列的最小值和最大值。首先把i,j初始化为1。如果从i到j的和大于s,从序列中去掉较小的值i,并增大i的值;反之,去掉j的值,并增大j的值。因为这个序列至少要两个数字,一直增加i到target//2为止
class Solution:
def findContinuousSequence(self, target: int) -> List[List[int]]:
i = 1 # 滑动窗口的左边界
j = 1 # 滑动窗口的右边界
sum = 0 # 滑动窗口中数字的和
res = []
while i <= target // 2:
if sum < target:
# 右边界向右移动
sum += j
j += 1
elif sum > target:
# 左边界向右移动
sum -= i
i += 1
else:
# 记录结果
arr = list(range(i, j))
res.append(arr)
# 左边界向右移动
sum -= i
i += 1
return res