LeetCode #39 Combination Sum
阿新 • • 發佈:2020-10-12
題目
解題思路
這是一道典型的排列組合問題,考慮採用遞迴的方法解決,每次遞迴計算時需要有一個數據池,用來從中選擇資料加到當前已選擇數的陣列中;一個target,如果當前數candidates[i]大於target了,就可以跳過;還需要一個記錄已選擇數的陣列path,記錄此次遞迴之前經過的路徑;另外還要一個返回值陣列ret,如果target等於0了,就可以直接把path加到ret中了。
程式碼
class Solution: def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]: ret = [] self.dfs(candidates, target, [], ret) return ret def dfs(self, candidates: List[int], target: int, path: List[int], ret: List[List[int]]): if target < 0: return if target == 0: ret.append(path) return for i in range(len(candidates)): if target < candidates[i]: continue self.dfs(candidates[i:], target-candidates[i], path+[candidates[i]], ret)