Given a set of candidate numbers (candidates
) (without duplicates) and a target number (target
), find all unique combinations in candidates
where the candidate numbers sums to target
.
The same repeated number may be chosen from candidates
unlimited number of times.
Note:
target
) will be positive integers.Example 1:
Input: candidates =[2,3,6,7],
target =7
, A solution set is: [ [7], [2,2,3] ]
Example 2:
Input: candidates = [2,3,5],
target = 8,
A solution set is:
[
[2,2,2,2],
[2,3,3],
[3,5]
]
这个题目思路跟[LeetCode] 40. Combination Sum II_Medium tag: backtracking基础上, 只不过因为没有duplicate,然后sort nums之后,只要nums[i] > target, break 即可。同时因为每个nums[i] 可以用无限次,所以需要在for loop中保持i不变。
Code
class Solution: def combinationSum(self, nums, target): ans = [] nums.sort() self.search(nums, ans, [], 0, target) return ans def search(self, nums, ans, temp, pos, target): if target == 0: ans.append(temp) for i in range(pos, len(nums)): if nums[i] > target: # because we sorted the nums break self.search(nums, ans, temp + [nums[i]], i , target - nums[i]) # keep i instead of i + 1, because we can use one number unlimited times
[LeetCode] 39. Combination Sum_Medium tag: backtracking
原文:https://www.cnblogs.com/Johnsonxiong/p/10924482.html