组合总和 Ⅳ
给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。
题目数据保证答案符合 32 位整数范围。
示例 1:
输入:nums = [1,2,3], target = 4
输出:7
解释:
所有可能的组合为:
(1, 1, 1, 1)
(1, 1, 2)
(1, 2, 1)
(1, 3)
(2, 1, 1)
(2, 2)
(3, 1)
请注意,顺序不同的序列被视作不同的组合。
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var combinationSum4 = function(nums, target) {
nums.sort((a,b)=>b-a)
const cache = new Map()
function f(target){
if(target<0) return 0
if(target===0) return 1
if(cache.has(target)) return cache.get(target)
let res = 0
for(let i=0;i<nums.length;i++){
res += f(target-nums[i])
}
cache.set(target,res)
return res
}
return f(target)
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var combinationSum4 = function(nums, target) {
let f = new Array(target + 1).fill(0)
f[0] = 1
for(let i = 1; i < f.length; i++) {
for(let j = 0; j < nums.length; j++) {
if(nums[j] <= i ) {
f[i] += f[i - nums[j]]
}
}
}
return f[target]
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/combination-sum-iv