题目描述
题目链接:leetcode-cn.com/problems/co…
思路分析
循环数组,如果当前位置的数num小于target,则递归将target-num作为新的target调用函数,如果num等于target就将总数加一,循环完毕后返回该target下的组合数的总数。
只是这样做的话会有很多重复的运算,所以可以记录每一个target的组合数,当下次再遇到相同的target时直接返回即可。
代码
var combinationSum4 = function (nums, target) {
let mmap = new Map();
const recursive = (nums, target) => {
let sum = 0;
if (mmap.has(target)) {
return mmap.get(target);
}
for (num of nums) {
if (num == target) {
sum++;
} else if (num < target) {
sum += recursive(nums, target - num);
}
}
mmap.set(target, sum);
return sum;
}
recursive(nums, target);
return mmap.get(target);
};