劍指offer 和為S的連續正數序列 python
阿新 • • 發佈:2018-12-17
題目描述
小明很喜歡數學,有一天他在做數學作業時,要求計算出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