LeetCode216:Combination Sum III(回溯)
阿新 • • 發佈:2018-11-29
Find all possible combinations of k numbers that add up to a number n, given that only numbers from 1 to 9 can be used and each combination should be a unique set of numbers.
Note:
- All numbers will be positive integers.
- The solution set must not contain duplicate combinations.
Example 1:
Input: k = 3, n = 7 Output: [[1,2,4]]
Example 2:
Input: k = 3, n = 9 Output: [[1,2,6], [1,3,5], [2,3,4]]
LeetCode:連結
216Combination Sum III是在LeetCode40:Combination Sum II(回溯)的基礎上,把陣列限制為了1-9 9個數字,然後結果的組合也必須是k個數字,和為n。這個的主要不同在於k個數字,其實也就是加個判斷。
class Solution(object): def combinationSum3(self, k, n): """ :type k: int :type n: int :rtype: List[List[int]] """ ans, res = [], [] candidates = list(range(1, 10)) self.backtracking(candidates, n, 0, ans, res, k) return res def backtracking(self, candidates, target, start, ans, res, k): if target == 0 and len(ans) == k: res.append(ans) else: for i in range(start, len(candidates)): if target < candidates[i]: break self.backtracking(candidates, target-candidates[i], i+1, ans+[candidates[i]], res, k) if __name__ == '__main__': a = Solution() print(a.combinationSum3(2, 18))