LeetCode|377. 组合总和 Ⅳ

209 阅读1分钟

题目描述

题目链接:leetcode-cn.com/problems/co… image.png

思路分析

循环数组,如果当前位置的数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);
};