#!/usr/bin/python
# -*- coding: utf-8 -*-
'''
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.
注意:仅可以使用1~9,每个数只能用一次
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]]
"""
if k == 0 or k > 45:
return []
if k == 1:
return [[n]]
ret = []
tmp = [0] * k
self.__combinationSum3(k,n,1,0,tmp,0,ret)
return ret
def __combinationSum3(self,k,n,next_num,sum,tmp,tmp_index,ret):
if k - tmp_index > n - next_num + 1:#需要的个数 > 剩下填充的数字个数
return 0
if next_num > n - sum: #next_num比需要的数大,剩下的数肯定比n - sum大
return 0
if tmp_index == k - 1:
if n - sum >= next_num and n - sum < 10:
tmp[tmp_index] = n - sum
ret.append(list(tmp))
return 0
for i in range(next_num,9):
tmp[tmp_index] = i
self.__combinationSum3(k,n,i + 1,sum + i,tmp,tmp_index + 1,ret)
if __name__ == "__main__":
s = Solution()
print s.combinationSum3(2,18)
47 leetcode - Combination Sum III
最新推荐文章于 2020-05-15 08:59:04 发布
本文介绍了一个寻找所有可能的组合使k个数加起来等于n的问题,仅使用1到9的数字且每个数字只能使用一次。通过递归实现,提供了Python代码示例并展示了如何找到所有满足条件的数字组合。
616

被折叠的 条评论
为什么被折叠?



