在 JavaScript 中获取特定总和的方法

javascriptweb developmentfront end technology

问题

我们需要编写一个 JavaScript 函数,该函数将一个整数数组 arr 作为第一个参数,将一个整数 target 作为第二个参数。

对于数组中的每个整数,我们的函数可以为其分配 ‘+’ 或 ‘-’。

我们的函数应该找出总共有多少种方法可以分配 ‘+’、‘-’,以使数组的整数总和等于目标总和 target。

例如,如果函数的输入是 −

const arr = [1, 1, 1, 1, 1];
const target = 3;

那么输出应该是 −

 
const output = 5;

输出说明:

因为这 5 种方式是 −

-1+1+1+1+1 = 3
+1-1+1+1+1 = 3
+1+1-1+1+1 = 3
+1+1+1-1+1 = 3
+1+1+1+1-1 = 3

示例

其代码为 −

const arr = [1, 1, 1, 1, 1];
const target = 3;
const waysToSum = (arr = [], target = 1) => {
   const map = {};
   const find = (arr, target, i) => {
      let val = i + '->' + target;
      if(map[val] !== undefined){
         return map[val];
      };
      if(i === 0){
         if (target === 0 && arr[0] === 0) { return 2 }
         return arr[0] === target || arr[0] === -target ? 1 : 0
      };
      map[val] = find(arr, target + arr[i], i - 1) + find(arr, target - arr[i], i - 1);
      return map[val]
   };
   return find(arr, target, arr.length-1)
};
console.log(waysToSum(arr, target));

输出

控制台中的输出将是 −

5

相关文章