美文网首页
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