繁体   English   中英

for循环中的Javascript位逻辑

[英]Javascript bitwise logic in a for loop

我一直在尝试改善自己的Javascript,并且一直在克服Coderbyte的挑战。 我似乎无法完美破解的唯一简单难题就是“数组加法1” *。 我正在尝试将我的代码与其他用户的代码进行比较,该用户的响应如下:

function ArrayAdditionI(arr) { 

  for (var i = 0; i < arr.length; i++) {
    arr[i] = parseInt(arr[i], 10);
  }

  var max = arr[0];
  for (var i = 1; i < arr.length; i++) {
    max = Math.max(max, arr[i]);
  }
  //everything above makes sense
  for (var i = 0, l = 1 << arr.length; i < l; i++) {
    var s = 0, cnt = 0;
    for (var j = 0; j < arr.length; j++) {
      if (i & (1 << j)) {
        s += arr[j];
        cnt++;
      }
    }

    if (cnt > 1 && s == max) {
      return true;
    }
  }

  return false;       
}

ArrayAdditionI(/* some array*/)        

有人可以帮忙用简单的英语解释一下上面如何使用按位运算符吗?

[*]

如果可以将数组中数字的任意组合加起来等于数组中的最大数字,则让函数ArrayAdditionI(arr)提取存储在arr中的数字数组并返回字符串true,否则返回字符串false。 例如:如果arr包含[4,6,23,10,1,3],则输出应返回true,因为4 + 6 + 10 + 3 =23。该数组将不会为空,也不会包含所有相同的元素,并可能包含负数。

使用该代码作者可以创建元素的所有排列。

说明:

假设我们有4个元素:

  1. 外循环迭代0..15
  2. 内循环检查i的特定位是否设置为i & (1 << j)
  3. 如果已设置-累计总和
  4. 在我们遍历所有位之后-检查总和是否等于预期

PS:需要cnt > 1来检查多个数字之和是否为一个

PPS:一次迭代的详细说明。

假设当前的i = 10 (二进制1010 )。

因此,当我们执行嵌套循环时-我们将检查仅设置了第2位和第4位,这意味着我们将尝试对数组的第2位和第4位元素求和。 然后检查它们的总和是否等于最大值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM