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

2020-10-23  本文已影响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
上一篇 下一篇

猜你喜欢

热点阅读