给定一个无重复元素的正整数数组 nums 和一个正整数 target ,找出 nums 中所有可以使数字之和为目标数 target 的组合,nums 中的数可以重复选取,只要选出的组合中有一个数不同则视为是不同组合。
数据范围:数组长度满足
, 数组中的元素满足
,
,保证组合数结果少于 150 个
1,[1]
[[1]]
5,[1,4,5]
[[1,4],[5],[1,1,1,1,1]]
5,[2]
[]
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param target int整型 # @param nums int整型一维数组 # @return int整型二维数组 # class Solution: def combinationCount(self , target: int, nums: List[int]) -> List[List[int]]: # write code here res = [] self.traverse(nums, 0, [], res, target) return res def traverse(self, nums, now, tmp, res, target): if now == target: res.append(tmp.copy()) return if now > target: return for i in range(len(nums)): tmp.append(nums[i]) self.traverse(nums[i:], now + nums[i], tmp, res, target) tmp.pop()
class Solution: def sub_process(self, target, nums, arr, res, start): total = sum(arr) if total == target: res.append(arr) else: for i in range(start, len(nums)): if nums[i] + total <= target: self.sub_process(target, nums, arr+[nums[i]], res, i) def combinationCount(self , target: int, nums: List[int]) -> List[List[int]]: # write code here res = [] self.sub_process(target, nums, [], res, 0) return res