LeetCode第三十九題 Python實現

2021-10-19 10:27:38 字數 3132 閱讀 2032

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級台階,有多少種不同的上法呢?請你利用計算機的優...

第三十九象 壬寅

讖 曰鳥無足 山有月 旭初公升 人都哭 頌 曰十二月中氣不和 南山有雀北山羅 一朝聽得金雞叫 大海沈沈日已過 金聖嘆註解 此象疑一外夷擾亂中原,必至酉年始得平也。推背圖網解 此象主要講倆件事,一是日寇占領東三省 二是西安事變,是本象的重點。兩句讖辭講的是日寇占領東三省的情形。頌辭講西安事變和抗戰勝利...