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)