1. 程式人生 > 實用技巧 >LeetCode #39 Combination Sum

LeetCode #39 Combination Sum

題目

Combination Sum


解題思路

這是一道典型的排列組合問題,考慮採用遞迴的方法解決,每次遞迴計算時需要有一個數據池,用來從中選擇資料加到當前已選擇數的陣列中;一個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)