输出描述:
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
解题思路:
1. 连续正数序列之和,所以tsum/2之后的部分肯定不满足要求。以100为例,50+50=100,那50+51肯定不行了,而49+50还不到,所以只有tsum/2以下的连续正数和有可能达到tsum/2;
2.从小的数开始的话,要从头遍历好多次才行(如从1开始,假设tsum=100,那要遍历很多很多次),所以就反过来遍历,从大数开始。用tsum减去当前的数,如果差值不为0,就继续往下走,直到差值=0或者小于0或者没有走到头了为止。
感觉不是最简单的方法,复杂度比较高
代码:
# -*- coding:utf-8 -*-
class Solution:
def FindContinuousSequence(self, tsum):
# write code here
res = []
if tsum:
if tsum == 1:
return res
elif tsum%2 != 0:
mid = tsum/2+1
else:
mid = tsum/2
list1 = range(1,mid+1)
list1.reverse
for i in range(len(list1)):
diff = tsum
j=i
list2 = []#临时存放
while diff >0 and j < len(list1):
data = list1[j]
list2.append(data)
diff = diff - data
j = j + 1
if diff == 0:
list2.reverse
res.append(list2)
return res
看到投票最多的答案的思路是这样的:
链接:https://www.nowcoder.com/questionTerminal/c451a3fd84b64cb19485dad758a55ebe
来源:牛客网