您的位置:首页 > 编程语言 > Python开发

38 leetcode - Combination Sum

2016-12-14 08:53 417 查看

leetcode - Combination Sum,可以重复使用一个元素

#!/usr/bin/python
# -*- coding: utf-8 -*-
'''
Combination Sum.
Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.
The same repeated number may be chosen from C unlimited number of times.
Note:
All numbers (including target) will be positive integers.
The solution set must not contain duplicate combinations.
For example, given candidate set [2, 3, 6, 7] and target 7,
A solution set is:
[
[7],
[2, 2, 3]
]
'''
class Solution(object):
def combinationSum(self, candidates, target):
"""
:type candidates: List[int]
:type target: int
:rtype: List[List[int]]
"""
length = len(candidates)
if length == 0:
return []

candidates.sort()  #先排序
ret = []
tmp = []
self.__combinationSum(candidates,0,length,0,target,ret,tmp,0)
return ret

def __combinationSum(self,candidates,start,length,sum,target,ret,tmp,tmp_cur):
if sum == target:
ret.append(tmp[:tmp_cur])
return

if start == length:
return

for index,i in enumerate(candidates[start:]):
if sum + i > target:#如果当前比target大,后面的肯定比target大,因为是有序的
break
tmp.append(i)
self.__combinationSum(candidates,index + start,length,sum + i,target,ret,tmp,tmp_cur + 1)
tmp.pop()

if __name__ == "__main__":
s = Solution()
print s.combinationSum([2, 3, 6, 7],7)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息