1.题目描述
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
思路:
设置两个变量,small,big,如果连续和小于给定值,增加big,大于给定值,增加small,如果相等,将连续序列加入结果中,同时增加small和big,以便找到下一组连续序列
代码
1 # -*- coding:utf-8 -*-
2 class Solution:
3 def FindContinuousSequence(self, tsum):
4 # write code here
5 res = []
6 if tsum<=2:#2及2以下不存在
7 return res
8 small = 1
9 big = 2
10 while small < big:
11 lst = []
12 #for i in range(small,big+1,1):
13 #lst.append(i)
14 lst = [i for i in range(small,big+1,1)] #简写方式
15 if sum(lst)> tsum:
16 small +=1
17 elif sum(lst)< tsum:
18 big +=1
19 else:
20 res.append(lst)
21 small += 1
22 big += 1
23 return res
24
2.题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出。
1 # -*- coding:utf-8 -*-
2 class Solution:
3 def FindNumbersWithSum(self, array, tsum):
4 # write code here
5 res = []
6 if len(array)==0:
7 return res
8 small = 0
9 big = len(array)-1
10 while small < big:
11 if array[small] + array[big]==tsum:
12 res.append(array[small])
13 res.append(array[big])
14 break
15 if array[small] + array[big] > tsum:
16 big -= 1
17 else:
18 small+=1
19 return res
20
note:
res.append(array[small],array[big]) 报错,append函数只有一个参数