题目描述:
输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。
序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
示例 1:
输入:target = 9
输出:[[2,3,4],[4,5]]
示例 2:
输入:target = 15
输出:[[1,2,3,4,5],[4,5,6],[7,8]]
限制:1 <= target <= 10^5
设置start和end两个区间索引,start从0开始,end不断加1
- 如果当前区间元素和等于S则保存区间,更新start和end
- 如果区间和大于S则终止end自增,更新start和end
- 如果区间和小于S,end自增
# -*- coding:utf-8 -*-
class Solution:
def findContinuousSequence(self, target: int) -> List[List[int]]:
if target == 0: return [0]
nums = [i for i in range(1, (target + 1) // 2 + 1)]
print(nums)
l, r = 0, 1
resutls = []
while l <= len(nums) and r <= len(nums):
if sum(nums[l:r]) == target:
resutls.append(nums[l:r])
l += 1
r = l + 1
elif sum(nums[l:r]) < target:
r += 1
else:
l += 1
r = l + 1
return resutls