135. The number combination
Chinese
English
Given a set of candidate digital candidates
and a target target
Found candidates
all and for the target
combinations.
In a combination of same, candidates
in an unlimited number appears.
Sample
Example 1:
输入: candidates = [2, 3, 6, 7], target = 7
输出: [[7], [2, 2, 3]]
Sample 2:
输入: candidates = [1], target = 3
输出: [[1, 1, 1]]
Precautions
- All values (including
target
) are positive integers. - The number in each combination of a return must be non-descending.
- Return among all combinations may be in any order.
- Solution Set can not contain duplicate combinations thereof.
class Solution: """ @param candidates: A list of integers @param target: An integer @return: A list of lists of integers """ def combinationSum(self, candidates, target): # write your code here result = [] self.dfs(sorted(list(set(candidates))), target, result, path=[], start_index=0) return result def dfs(self, nums, target, result, path, start_index): if target == 0 and path: result.append(list(path)) if target < 0: return for i in range(start_index, len(nums)): path.append(nums[i]) self.dfs(nums, target-nums[i], result, path, i) path.pop()
153. The combination of numbers II
Chinese
English
Given an array num
and an integer target
. Find num
all the numbers for the sum of the target
portfolio.
Sample
Example 1:
输入: num = [7,1,2,5,1,6,10], target = 8
输出: [[1,1,6],[1,2,5],[1,7],[2,6]]
Sample 2:
输入: num = [1,1,1], target = 2
输出: [[1,1]]
解释: 解集不能包含重复的组合
Precautions
- In a combination of the same,
num
each of a number can only be used once. - All values (including
target
) are positive integers. - The number in each combination of a return must be non-descending.
- Return among all combinations may be in any order.
- Solution Set can not contain duplicate combinations thereof.
class Solution: """ @param num: Given the candidate numbers @param target: Given the target number @return: All the combinations that sum to target """ def combinationSum2(self, nums, target): # write your code here result = [] self.dfs(sorted(nums), target, result, path=[], start_index=0) return result def dfs(self, nums, target, result, path, start_index): if target == 0 and path: result.append(list(path)) if target < 0: return for i in range(start_index, len(nums)): if i > 0 and nums[i] == nums[i-1] and i > start_index: continue path.append(nums[i]) self.dfs(nums, target-nums[i], result, path, i+1) path.pop()