我一直在努力提高我的Javascript,並一直在經歷Coderbyte的挑戰。我無法完全破解的唯一簡單挑戰就是「Array Addition 1」*。我想與誰得到了以下配置的完美應對其他用戶比較我的代碼:for循環中的Javascript按位邏輯
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.該數組不會包含全部元素,並可能包含負數。
代碼的作者使用它來獲取元素 – zerkms
感謝的所有排列,所以我假定(但不知道)l表示數組中的元素的所有邏輯組合。我不理解的是它如何在if語句中用作布爾條件。例如,0和64 = true或false? – vagon
當您檢查設置的位時 - 您檢查數字是否不是虛假。所以如果它是'0'的 - 它被視爲'false',否則'true'。檢查'10&(1 << 0)'和'10&(1 << 1)' – zerkms