[LeetCode]题解(python):039-Combination Sum

题目来源:

  https://leetcode.com/problems/combination-sum/


 

题意分析:

  输入一个set和一个target,找出所以由set里面的数组成的相加等于target的组合。组合必须按照字典序排序。


 

题目思路:

  由于组合必须按照字典序排序。那么首先将set排序。不难发现,题目可以分成两种情况,第一个组合不包括set[0],这种情况就去掉set[0];另外一种是包括set[0],这种情况就是将target - set[0]。用递归来解决这个问题即可。


 

代码(python):

  

 1 class Solution(object):
 2     def boolcombinationSum(self, candidates, target,j):
 3         ans = [];size = len(candidates)
 4         if target == 0:
 5             return []
 6         if size < j + 1 or target < 0:
 7             return [[-1]]
 8         tmp1 = self.boolcombinationSum(candidates,target,j + 1);tmp2 = self.boolcombinationSum(candidates,target - candidates[j],j)
 9         if len(tmp2) == 0:
10             ans.append([candidates[j]])
11         elif tmp2 != [[-1]]:
12             for i in range(len(tmp2)):
13                 ans.append([candidates[j]] + tmp2[i])
14         if len(tmp1) != 0 and tmp1 != [[-1]]:
15             for i in range(len(tmp1)):
16                 ans.append(tmp1[i])
17         if len(tmp2) != 0 and tmp1 == [[-1]] and tmp2 == [[-1]]:
18             return [[-1]]
19         return ans
20     def combinationSum(self, candidates, target):
21         """
22         :type candidates: List[int]
23         :type target: int
24         :rtype: List[List[int]]
25         """
26         candidates.sort()
27         ans = self.boolcombinationSum(candidates,target,0)
28         if ans == [[-1]]:
29             return []
30         return ans
View Code

 


 

转载请注明出处:http://www.cnblogs.com/chruny/p/4926306.html

posted @ 2015-10-31 21:45  Ry_Chen  阅读(773)  评论(0编辑  收藏  举报