1. 程式人生 > >劍指offer 和為S的連續正數序列 python

劍指offer 和為S的連續正數序列 python

題目描述

小明很喜歡數學,有一天他在做數學作業時,要求計算出9~16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100(至少包括兩個數)。沒多久,他就得到另一組連續正數和為100的序列:18,19,20,21,22。現在把問題交給你,你能不能也很快的找出所有和為S的連續正數序列? Good Luck!

樣例

輸出所有和為S的連續正數序列。序列內按照從小至大的順序,序列間按照開始數字從小到大的順序

想法一: 兩重迴圈,i範圍是1到tsum一半,j範圍是i到tsum一半加一

class Solution:
    def FindContinuousSequence
(self, tsum): res = [] for i in range(1, tsum//2+1): sum = 0 for j in range(i, tsum//2+2): sum += j if sum == tsum: res.append(list(range(i, j+1))) return res

想法二: 類似於作業系統裡的滑動視窗,如果和等於tsum則將現在視窗內序列加入res,如果小於tsum,增加quick,如果大於tsum,增加low.

class Solution:
    def FindContinuousSequence(self, tsum):
        low = 1
        quick = 2
        res = []
        while quick > low:
            esum = sum(range(low, quick+1))
            if esum == tsum:
                res.append(list(range(low, quick+1)))
                low += 1
            elif
esum < tsum: quick += 1 else: low += 1 return res

最後

刷過的LeetCode或劍指offer原始碼放在Github上了,希望喜歡或者覺得有用的朋友點個star或者follow。 有任何問題可以在下面評論或者通過私信或聯絡方式找我。 聯絡方式 QQ:791034063 Wechat:liuyuhang791034063 CSDN:https://blog.csdn.net/Sun_White_Boy Github:https://github.com/liuyuhang791034063