python練習題,寫一個方法 傳進去列表和預期的value 求出所有變量得取值可能性(例如list為[1,2,3,4,5,6,12,19],value為20,結果是19+1==20只有一種可能性),要求時間復雜度為O(n)
題目:(來自光榮之路老師)
a+b==value
a+b+c=value
a+b+c+d==value
a+b+c+d+...=value
a和b....取值範圍都在0-value
寫一個方法 傳進去列表和預期得value 求出所有變量得取值可能性
一個有順序得數字序列 從小到大 不限制個數 序列裏面隨機兩個數相加為value得可能性
例子[1,2,3,4,5,6,12,19] value為20
19+1==20只有一種可能性
要求時間復雜度為O(n)
代碼:
#encoding=utf-8
seq=[1,19,4,16,54,32,12,56,43,87,12]
value = 20
def fun(seq,value):
print "seq:",seq
print "value:",value
num=0
try:
list=sorted(seq)
cur=[]
for i in range(len(list)-1):
data=value
list1=list[:]
list1.remove(list[i])
#print "list:",list
#print "list1:",list1
#print "list[i]:",list[i]
if (data - list[i]) in list1 and (data -list[i]) not in cur:
print list[i],data-list[i]
cur.append(list[i])
cur.append(data-list[i])
num+=1
print "there a %s curcumstance!" %num
except Exception,e:
raise e
fun(seq,value)
結果:ok
D:\測試資料\python課件\Python筆記>python task_test.py
seq: [1, 19, 4, 16, 54, 32, 12, 56, 43, 87, 12]
value: 20
1 19
4 16
there a 2 curcumstance!
python練習題,寫一個方法 傳進去列表和預期的value 求出所有變量得取值可能性(例如list為[1,2,3,4,5,6,12,19],value為20,結果是19+1==20只有一種可能性),要求時間復雜度為O(n)