試題鏈接
題目描述:
請實作一個函式,輸入一個整數(以二進制串形式),輸出該數二進制表示中 1 的個數,例如,把 9 表示成二進制是 1001,有 2 位是 1,因此,如果輸入 9,則該函式輸出 2
例如輸入:
輸入:00000000000000000000000000001011
輸出:3
解釋:輸入的二進制串 00000000000000000000000000001011 中,共有三位為 '1',
輸入:00000000000000000000000010000000
輸出:1
解釋:輸入的二進制串 00000000000000000000000010000000 中,共有一位為 '1',
輸入:11111111111111111111111111111101
輸出:31
解釋:輸入的二進制串 11111111111111111111111111111101 中,共有 31 位為 '1',
資料范圍:
輸入必須是長度為 32 的 二進制串 ,
解題思路:
n - 1 :二進制數字 n 最右邊的 1 變成 0 ,此 1 右邊的 0 都變成 1
n&(n - 1) : 二進制數字 n 最右邊的 1 變成 0 ,其余不變,

演算法流程:
1.初始化一個num = 0,代表最后結果
2.當n不為0的時候, 回圈執行 n = n&(n-1),每次都把n對應二進制最右邊的那個1消除掉,結果加一,num= num+1
AC代碼(c++)
class Solution {
public:
int hammingWeight(uint32_t n) {
int num = 0;
while(n){
num++;
n&=(n-1);
}
return num;
}
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/252229.html
標籤:其他
上一篇:python呼叫gdal.warp函式進行正射校正出錯分析
下一篇:C++類小結
