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

[leetcode]Combination Sum II @ Python

2014-06-09 11:48 351 查看
原题地址:https://oj.leetcode.com/problems/combination-sum-ii/

题意:

Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.

Each number in C may only be used once in the combination.

Note:

All numbers (including target) will be positive integers.

Elements in a combination (a1, a2, … , ak) must be in non-descending order. (ie, a1 ≤ a2 ≤ … ≤ ak).

The solution set must not contain duplicate combinations.

For example, given candidate set
10,1,2,7,6,1,5
and target
8
,
A solution set is:
[1, 7]

[1, 2, 5]

[2, 6]

[1, 1, 6]


解题思路:和上一道题类似。只不过这道题要求candidate中的每个数只能使用一次。也是使用dfs。

代码:

class Solution:
# @param candidates, a list of integers
# @param target, integer
# @return a list of lists of integers
def DFS(self, candidates, target, start, valuelist):
length = len(candidates)
if target == 0 and valuelist not in Solution.ret: return Solution.ret.append(valuelist)
for i in range(start, length):
if target < candidates[i]:
return
self.DFS(candidates, target - candidates[i], i + 1, valuelist + [candidates[i]])

def combinationSum2(self, candidates, target):
candidates.sort()
Solution.ret = []
self.DFS(candidates, target, 0, [])
return Solution.ret
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: