题目描述
输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。
序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
示例 1:
输入:target = 9
输出:[[2,3,4],[4,5]]
示例 2:
输入:target = 15
输出:[[1,2,3,4,5],[4,5,6],[7,8]]
面试题57II 和为s的连续正数序列
- 利用滑动窗口解决,使用等差数列公式求和。主要注意当找到目标值时,让后面的指针向后进一步。
- 结束的条件是窗口第一个数与最后一个数相加大于target
代码
class Solution:
def findContinuousSequence(self, target: int) -> List[List[int]]:
if not target or target < 3:
return []
i = 1.0
j = 2.0
res = []
while i+j <= target:
t = ( (i+j)/2 ) * (j-i+1)
if t > target:
i += 1
if t < target:
j += 1
if t == target:
res.append([x for x in range(int(i), int(j+1))])
j += 1
return res