题目
输入一个正整数 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
答案
class Solution:def findContinuousSequence(self, target: int) -> List[List[int]]:res = []l = 1r = 2while l<r:a = []sum = (l+r)*(r-l+1)/2if sum < target:r+=1elif sum>target:l+=1else:for i in range(l,r+1):a.append(i)res.append(a)l+=1r+=1return res
Note
双指针滑动
l初始位置1,r初始位置2
如果求的数字小于target,r向右滑动,
如果求得的数字大于target,l向右滑动
如果等于,则推入这几个输入到链表,
sum = (l+r)*(r-l+1)/2
等差数列求和
