簡體   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