和為s的連續正數序列

題目描述

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

輸出描述:

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

解題思路:

0.采用雙指針的方法
1.開始的時候,p和q指針分別指向序列的前兩個數1和2
2.當p和q所指向的值之和小于tsum時,將q指針向前移,增加一個數到答案序列里
3.當p和q所指向的值之和大于tsum時,將p指針向前移,減少一個數到答案序列里
4.當找到一個連續序列和為tsum后,我們將q指針向前移,重復前面的2,3步的過程。

# -*- coding:utf-8 -*-
class Solution:
    def FindContinuousSequence(self, tsum):
        # write code here
        #0.采用雙指針的方法
        #1.開始的時候,p和q指針分別指向序列的前兩個數1和2
        #2.當p和q所指向的值之和小于tsum時,將q指針向前移,增加一個數到答案序列里
        #3.當p和q所指向的值之和大于tsum時,將p指針向前移,減少一個數到答案序列里
        #4.當找到一個連續序列和為tsum后,我們將q指針向前移,重復前面的2,3步的過程。
        if tsum<=0:
            return []
        p = 1
        q = 2
        curres = [p,q]
        res = []
        while p<q:
            if sum(curres) < tsum:
                q += 1
                curres = range(p,q+1)
            elif sum(curres) > tsum:
                p += 1
                curres = range(p,q+1)
            elif sum(curres) == tsum:
                res.append(curres)
                q += 1
                curres = range(p,q+1)
        return res
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容