题目描述
# -*- coding:utf-8 -*-
class Solution:
def FindContinuousSequence(self, tsum):
# write code here
if tsum < 3: #若给定tsum < 3,则没有合适的整数序列满足和小于3
return []
# 仍然使用左右两个指针,这两个指针限定了一个连续正数序列
leftNum = 1
rightNum = 2
middleNum = (1 + tsum) / 2
result = []
while leftNum < middleNum: #由于正数序列从小到大逐个增加,因此大于和S的半数之后,之后的组合都已经遍历过,无需再次遍历
sumNum = 0
resultTemp = []
for index in range(leftNum, rightNum + 1): #对两个指针内的正数序列求和
resultTemp.append(index)
sumNum += index
if sumNum == tsum:
result.append(resultTemp)
rightNum += 1 #即使已经求得了和为S的正数序列,仍然不能停止搜索,继续增加右指针的值,寻找下一个合适的正数序列
elif sumNum > tsum:
leftNum += 1 #若左右指针限制的正数序列和大于S,则丢弃最小的数;若丢弃最大的数,则重复了上一步添加最大数的操作,不会满足
else:
rightNum += 1 # 若左右指针限制的正数序列和小于S,则将右指针后移一位,整数序列变长
return result
网友评论