给定一个由不同整数构成的数组 nums 和一个整数 target ,请你从 nums 找出总和是 target 的组合的个数。解集中可以重复使用 nums 中的元素。且解集中数字顺序不同视为不同的组合。
数据范围: 数组长度满足
,数组中的数满足
, ![](https://www.nowcoder.com/equation?tex=1%20%5Cle%20target%20%5Cle%201000%20%5C)
[1,2,3],4
7
所有可能的组合为: (1, 1, 1, 1) (1, 1, 2) (1, 2, 1) (1, 3) (2, 1, 1) (2, 2) (3, 1)
[9],10
0
[9],18
1
[[9,9]]
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param nums int整型一维数组 # @param target int整型 # @return int整型 # class Solution: def combination(self , nums: List[int], target: int) -> int: # write code here res_s = set() self.traverse(nums, 0, target, [], res_s) return len(res_s) def traverse(self, nums, now_sum, target, tmp_arr, res_s): if now_sum == target: res_s.add(tuple(tmp_arr)) return if now_sum > target: return for i in range(len(nums)): tmp_arr.append(nums[i]) self.traverse(nums, now_sum + nums[i], target, tmp_arr, res_s) tmp_arr.pop()