title: leetcode no.39
categories:
tags:
好幾天沒寫了,正過年休息了兩天,今天把之前的補回來,新年快樂,牛年大吉奧。
給定乙個無重複元素的陣列 candidates 和乙個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。
candidates 中的數字可以無限制重複被選取。
說明:所有數字(包括 target)都是正整數。
解集不能包含重複的組合。
示例 1:
輸入:candidates = [2,3,6,7], target = 7,
所求解集為:
[ [7],
[2,2,3]
]示例 2:
輸入:candidates = [2,3,5], target = 8,
所求解集為:
[ [2,2,2,2],
[2,3,3],
[3,5]]
1 <= candidates.length <= 30
1 <= candidates[i] <= 200
candidate 中的每個元素都是獨一無二的。
1 <= target <= 500
這一版我自己寫的利用回溯法,本地測試用例都ac了,但是在提交的時候顯示我[1],2這一測試用例輸出的結果為,但是我在本機測試的結果卻是正確的。
沒想明白裂開。
class solution(object):
sort_result =
def backtrack(self, target, candidates, temp):
if sum(temp) == target:
#print(temp)
return self.backtrack(target,candidates,),result
if target < sum(temp):
return false
for i in range(len(candidates)):
if sorted(temp) in self.sort_result:
temp.pop()
continue
if self.backtrack(target,candidates,temp):
return true
temp.pop()
def combinationsum(self, candidates, target):
""":type candidates: list[int]
:type target: int
:rtype: list[list[int]]
核心思想:
分析題目同樣可以看出我們應該使用回溯法進行求解
回溯法的標準框架
def backtrack(path, selected):
if 滿足停止條件:
for 選擇 in 選擇列表:
做出選擇
遞迴執行backtrack
滿足則return true
如果不滿足要求就撤銷選擇
"""global result
result =
self.backtrack(target,candidates,)
#print(result)
return result
if __name__ == '__main__':
s = solution()
print(s.combinationsum(candidates = [1], target = 2))
發現在python裡面還是把需要遞迴呼叫的函式放到需要的函式裡面吧,這樣result可以直接被修改而不需要在return。
class solution:
class solution(object):
def combinationsum(self, candidates, target):
""":type candidates: list[int]
:type target: int
:rtype: list[list[int]]
核心思想:
分析題目同樣可以看出我們應該使用回溯法進行求解, 注意要進行剪枝操作
回溯法的標準框架
def backtrack(path, selected):
if 滿足停止條件:
for 選擇 in 選擇列表:
做出選擇
遞迴執行backtrack
滿足則return true
如果不滿足要求就撤銷選擇
"""result =
def backtrack(target, candidates, temp, l, result):
if sum(temp) == target:
# print(temp)
return
if target < sum(temp):
return
for i in range(l,len(candidates)):
if sorted(temp) in result:
temp.pop()
continue
backtrack(target, candidates, temp, i,result)
temp.pop()
candidates.sort()
backtrack(target,candidates,,0,result)
#print(result)
return result
if __name__ == '__main__':
s = solution()
print(s.combinationsum(candidates = [2,3,6,7], target = 7))
LeetCode第三十九題 求組合所有可能性
問題簡介 給定乙個陣列 沒有重複元素 和乙個目標值,找到陣列中元素可以組成目標值所以組合 注 1.陣列元素可以重複使用 2.所有數字 包括目標 都是正整數 3.解決方案集不得包含重複的組合 舉例 1 輸入 candidates 2,3,6,7 target 7,結果 7 2,2,3 2 輸入 can...
第三十九級台階
第39級台階 小明剛剛看完電影 第39級台階 離開電影院的時候,他數了數禮堂前的台階數,恰好是39級 站在台階前,他突然又想著乙個問題 如果我每一步只能邁上1個或2個台階。先邁左腳,然後左右交替,最後一步是邁右腳,也就是說一共要走偶數步。那麼,上完39級台階,有多少種不同的上法呢?請你利用計算機的優...
第三十九象 壬寅
讖 曰鳥無足 山有月 旭初公升 人都哭 頌 曰十二月中氣不和 南山有雀北山羅 一朝聽得金雞叫 大海沈沈日已過 金聖嘆註解 此象疑一外夷擾亂中原,必至酉年始得平也。推背圖網解 此象主要講倆件事,一是日寇占領東三省 二是西安事變,是本象的重點。兩句讖辭講的是日寇占領東三省的情形。頌辭講西安事變和抗戰勝利...