47 leetcode - Combination Sum III

来源:互联网 发布:scopus数据库免费吗 编辑:程序博客网 时间:2024/05/16 06:07
#!/usr/bin/python# -*- coding: utf-8 -*-'''Combination Sum IIIFind 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)
0 0
原创粉丝点击