用掩碼檢查整數的每一位,並不斷將掩碼左移。
迴圈的次數等於整數的二進位制的位數,32位的整數需要迴圈32次。
public
class
solution
mask <<=1;
//右移一位
}return bits;
}}
這種解法能夠實現整數的二進位制中有幾個1就只需要迴圈幾次。
如果乙個整數不為0,那麼這個整數的二進位制至少有乙個1。如果把這個整數減去1,則原來最右邊的1會變成0,原來在這個1的右邊所有的0全部變成1,其餘的所有位全不受影響。例如,1100減去1變成1011。
利用上述規則,如果n和n-1做與運算,將會把n最右邊的1消去,其餘位不受影響,例如,1100 & 1011 = 1000。那麼,n中有多少個1就會進行多少次這樣的操作。
public
class
solution
return bits;
}}
劍指offer 15 二進位制中1的個數
位運算 左移運算子m 例如 00001010 2 00101000 10001010 3 01010000 右移運算子與左移類似,但右移時處理最左邊位時稍微複雜 1 如果數字是乙個無符號數值,則用0填補最左邊的n位 2 如果數字是乙個有符號數值,則用數字的符號填補最左邊的n位 00001010 2 ...
劍指Offer 15 二進位制中1的個數
面試題15 二進位制中1的個數 題目 實現乙個函式,輸入乙個整數,輸出該數二級制表示中1的個數。例 把9表示成二進位制是1001,有2位是1。因此如果輸入9,則該函式輸出2。最直接的思路 從低位開始向高位逐一比較是否為1,並計數。時間複雜度 o n num的二進位制位數 空間複雜度 o 1 利用二進...
劍指offer 15 二進位制中1的個數
解題思路一 最佳方法 把乙個整數減去1,再和原整數做 與運算 會把該整數最右邊的1變成0。那麼乙個整數的二進位制中表示中有多少個1,就可以進行多少次這樣的操作。class solution def hammingweight self,n int int res 0 while n res 1 n ...