avatar

Catalog
面试题57 和为s的连续正数序列

题目描述

输入一个正整数 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
Author: kim yhow
Link: http://yoursite.com/2020/03/06/面试题57-和为s的连续正数序列/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Donate
  • 微信
    微信
  • 支付寶
    支付寶