剑指 Offer II 104. 排列的数目

198 阅读1分钟

剑指 Offer II 104. 排列的数目

给定一个由 不同 正整数组成的数组 nums ,和一个目标整数 target 。请从 nums 中找出并返回总和为 target 的元素组合的个数。数组中的数字可以在一次排列中出现任意次,但是顺序不同的序列被视作不同的组合。

  • for (var i = 1; i <= target; i++) { 求出目标值为1 ~ target之间的情况,结果返回dp[target]就行
  • for (var j of arr) {指定了目标值target后,然后就开始兑换了,分别由面额为arr[j]兑换的,所以 dp[i] += dp[i - j];
var combinationSum4 = function (arr, target) {
    var dp = new Array(target + 1).fill(0);
    dp[0] = 1;
    for (var i = 1; i <= target; i++) {
        for (var j of arr) {
            if (i >= j) {
                dp[i] += dp[i - j];
            }
        }
    }
    return dp[target];
};

代码调试

console.log(combinationSum4([2, 4, 5], 15));

image.png