在 JavaScript 中使用运算符产生所需结果


问题

我们需要编写一个 JavaScript 函数,该函数的第一个参数是包含正好 4 个数字的数组 arr,第二个参数是目标值 target。

我们的函数需要判断数组 arr 中的数字是否可以通过运算符 *、/、+、-、(、) 运算得到等于目标值 target 的值。

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

输入

const arr = [5, 3, 2, 1];
const target = 4;

输出

const output = true;

输出说明

因为我们可以通过以下方式获得 4

(5 - 1) * (3 - 2) = 4

示例

代码如下:

 在线演示

const arr = [5, 3, 2, 1];
const target = 4;
const canOperate = (arr = [], target = 1) => {
   const isValid = x => Math.abs(x - target) < 0.0000001
   const helper = (arr = []) => {
      if (arr.length === 1) {
         return isValid(arr[0])
      }
      let valid = false
      for (let i = 0; i < arr.length; i++) {
         for (let j = i + 1; j < arr.length; j++) {
            const nextArr = arr.filter((x, index) => index !== i && index !== j)
            valid = valid || helper([...nextArr, arr[i] + arr[j]])
            || helper([...nextArr, arr[i] - arr[j]])
            || helper([...nextArr, arr[j] - arr[i]])
            || helper([...nextArr, arr[i] * arr[j]])
            || helper([...nextArr, arr[i] / arr[j]])
            || helper([...nextArr, arr[j] / arr[i]])
         }
      }
      return valid
   }
   return helper(arr)
}
console.log(canOperate(arr, target));

输出

true

更新日期:2021 年 4 月 24 日

62 次浏览

开启您的 事业

通过完成课程获得认证

开始
广告