142 - 40 组合总和2
题目
给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
candidates 中的每个数字在每个组合中只能使用一次。
说明:
所有数字(包括目标数)都是正整数。
解集不能包含重复的组合。
示例 1:
输入: candidates = [10,1,2,7,6,1,5], target = 8, 所求解集为: [ [1, 7], [1, 2, 5], [2, 6], [1, 1, 6] ]
示例 2:
输入: candidates = [2,5,2,1,2], target = 5, 所求解集为: [ [1,2,2], [5] ]
解答
一样的回溯套路,需要跳过一下相同值,以及剪掉负数的分支
class Solution:
def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
if not candidates:
return []
res = []
tmp = []
candidates.sort()
def helper(begin, target, candidates):
if target == 0:
res.append(tmp[:])
for i in range(begin, len(candidates)):
if i > 0 and candidates[i] == candidates[i-1]:
continue
diff = target - candidates[i]
if diff < 0:
break
tmp.append(candidates[i])
newCand = candidates[:]
newCand.pop(i)
helper(i, diff, newCand)
tmp.pop()
helper(0, target, candidates)
return resRuntime: 48 ms, faster than 94.83% of Python3 online submissions for Combination Sum II.
Memory Usage: 12.7 MB, less than 100.00% of Python3 online submissions for Combination Sum II.
https://leetcode.com/problems/combination-sum-ii/discuss/259449/golang
Runtime: 0 ms, faster than 100.00% of Go online submissions for Combination Sum II.
Memory Usage: 2.8 MB, less than 100.00% of Go online submissions for Combination Sum II.
Runtime: 72 ms, faster than 68.74% of JavaScript online submissions for Combination Sum II.
Memory Usage: 37.3 MB, less than 20.00% of JavaScript online submissions for Combination Sum II.
Last updated
Was this helpful?