生活随笔
收集整理的這篇文章主要介紹了
组合总和Python解法
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
給定一個(gè)數(shù)組?candidates?和一個(gè)目標(biāo)數(shù)?target?,找出?candidates?中所有可以使數(shù)字和為?target?的組合。
candidates?中的每個(gè)數(shù)字在每個(gè)組合中只能使用一次。
注意:解集不能包含重復(fù)的組合。?
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/combination-sum-ii
?
class Solution(object):def combinationSum2(self, candidates, target):""":type candidates: List[int]:type target: int:rtype: List[List[int]]"""res = [] # 結(jié)果path = [] # 搜尋路徑def backtrack(candidates, target, sum, k): # 對(duì)象數(shù)組;目標(biāo)值;當(dāng)前總和;當(dāng)前開始相加的值if sum == target: res.append(path[:]) # 當(dāng)當(dāng)前總和等于目標(biāo)值時(shí),將此時(shí)的搜尋路徑加入到結(jié)果里return # 找到后直接返回for i in range(k, len(candidates)): # 從當(dāng)前位置開始進(jìn)行相加判斷if sum + candidates[i] > target: return # 數(shù)值判斷,爆了則返回if i > k and candidates[i] == candidates[i-1]: continue # 去重判斷,相同則跳過sum += candidates[i] # 目前數(shù)值總和加上當(dāng)前值path.append(candidates[i]) # 搜尋路徑添加backtrack(candidates, target, sum, i+1) # 對(duì)下一個(gè)值進(jìn)行相加判斷sum -= candidates[i] # 當(dāng)前值判斷完畢,總和去除當(dāng)前值path.pop() # 路徑彈出當(dāng)前值candidates.sort() # 首先對(duì)對(duì)象數(shù)組進(jìn)行排序,方便去重backtrack(candidates, target, 0, 0) # 第一輪return res # 返回結(jié)果
總結(jié)
以上是生活随笔為你收集整理的组合总和Python解法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。