美文网首页
LeetCode-剑指 Offer 57 - II-和为s的连续

LeetCode-剑指 Offer 57 - II-和为s的连续

作者: 阿凯被注册了 | 来源:发表于2020-10-23 08:42 被阅读0次

    输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。
    序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。


    image.png
    image.png

    Python3代码:

    公式推导法:

    class Solution:
        def findContinuousSequence(self, target: int) -> List[List[int]]:
            # a1 = (t - n(n-1)/2)/n
            ans=[]
            for n in range(2, target+1):
                tmp = target-n*(n-1)//2
                if tmp <= 0:
                    break
                if tmp % n == 0:
                    a1 = int(tmp/n)
                    ans.append([a1+i for i in range(n)])
            return ans[::-1]
            
    

    双指针滑动窗口:

    class Solution:
        def findContinuousSequence(self, target: int) -> List[List[int]]:
            i,j = 1,2
            ans = []
            while i <= target//2:
                s = sum(range(i,j))
                if s == target:
                    ans.append([k for k in range(i,j)])
                if s < target:
                    j+=1
                else: 
                    i+=1
            return ans
    

    相关文章

      网友评论

          本文标题:LeetCode-剑指 Offer 57 - II-和为s的连续

          本文链接:https://www.haomeiwen.com/subject/xeifmktx.html