题目

输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。

序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。

示例 1:

  1. 输入:target = 9
  2. 输出:[[2,3,4],[4,5]]
  3. 示例 2
  4. 输入:target = 15
  5. 输出:[[1,2,3,4,5],[4,5,6],[7,8]]

限制:

  1. 1 <= target <= 10^5

答案

  1. class Solution:
  2. def findContinuousSequence(self, target: int) -> List[List[int]]:
  3. res = []
  4. l = 1
  5. r = 2
  6. while l<r:
  7. a = []
  8. sum = (l+r)*(r-l+1)/2
  9. if sum < target:
  10. r+=1
  11. elif sum>target:
  12. l+=1
  13. else:
  14. for i in range(l,r+1):
  15. a.append(i)
  16. res.append(a)
  17. l+=1
  18. r+=1
  19. return res

Note

双指针滑动
l初始位置1,r初始位置2
如果求的数字小于target,r向右滑动,
如果求得的数字大于target,l向右滑动
如果等于,则推入这几个输入到链表,

sum = (l+r)*(r-l+1)/2
等差数列求和