[英]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個元素:
0..15
i
的特定位是否設置為i & (1 << j)
PS:需要cnt > 1
來檢查多個數字之和是否為一個
PPS:一次迭代的詳細說明。
假設當前的i = 10
(二進制1010
)。
因此,當我們執行嵌套循環時-我們將檢查僅設置了第2位和第4位,這意味着我們將嘗試對數組的第2位和第4位元素求和。 然后檢查它們的總和是否等於最大值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.