剑指offer 57 - 和为s的连续正数序列 - python

134 阅读1分钟

题目描述:

输入一个正整数 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