剑指 Offer 57 - II. 和为s的连续正数序列 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。 序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
示例 1:
输入:target = 9 输出:[[2,3,4],[4,5]] 示例 2:
输入:target = 15 输出:[[1,2,3,4,5],[4,5,6],[7,8]] 题解;
class Solution:
def findContinuousSequence(self, target: int) -> List[List[int]]:
'''
该数组是target,则需要找到1-target数组内和等于target的数字,且都为整数,至少为两个数
滑动窗口来解决,窗口的左边界和右边界都要指向1,注意不是下标,而是值为1
滑动窗口的左边界不会超过tartget的一半,因为超过了的话,加上右边界肯定大于target
'''
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
|