LeetCode----Combination Sum III

Combination Sum III

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.

Ensure that numbers within the set are sorted in ascending order.


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]]


分析:

一道深度优先搜索题。


代码:

class Solution(object):
    def combinationSum3(self, k, n):
        """
        :type k: int
        :type n: int
        :rtype: List[List[int]]
        """
        solutions = []
        self.dfs(k, n, list(), 0, 0, solutions)
        return solutions

    def dfs(self, k, n, knums, cur, deep, solutions):
        if deep == k - 1:  # 如果集合中已经有k - 1个元素了进行最后一个元素的判断后返回结果
            l = n - sum(knums)
            if l not in knums and max(knums) < l <= 9:
                return knums + [l]
            else:
                return None
        for i in range(cur + 1, min(n, 9) + 1):
            if len(knums) < k:
                res = self.dfs(k, n, knums + [i], i, deep + 1, solutions)
                if res:
                    solutions.append(res)

你可能感兴趣的:(LeetCode,python,搜索,DFS)