問題:撰寫一個函式,該函式接受一個無符號整數并回傳它具有的“1”位數(也稱為漢明權重)。
示例 1:
輸入: n = 00000000000000000000000000001011
輸出: 3
說明:輸入的二進制串00000000000000000000000000001011共有三個“1”位。
我的代碼
var hammingWeight = function(n) {
for (i=0; i<32; i ) {
var mask = 1;
var count = 0;
if ((mask & n) != 0 ) {
mask <<= 1;
count ;
}
return count;
}
};
測驗用例:
00000000000000000000000000001011
00000000000000000000000010000000
11111111111111111111111111111101
預期輸出:
3
1
31
輸出:
1
0
1
我的代碼做錯了什么?
uj5u.com熱心網友回復:
你在這里有幾個問題:
- 您正在重新定義
count和mask你的內for回圈。 - 您是
return在回圈的第一次迭代之后進行的,而不是等待整個事情計數完畢。 - 只有
mask在有一點時才移動1。
這是一個更正的函式:
var hammingWeight = function(n) {
var count = 0;
var mask = 1;
for (i=0; i<32; i ) {
if ((mask & n) != 0 ) {
count ;
}
mask <<= 1;
}
return count;
};
uj5u.com熱心網友回復:
一種更短的寫法可能是:
const hammingWeight = value => [...value].filter(f => f == 1).length;
解釋:
[...value] 這將根據您的字串創建一個由 0 和 1 組成的陣列
.filter(f => f == 1) 將過濾陣列,只保留 1 個值
.length 給你過濾陣列的長度
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/368951.html
標籤:javascript
