劍指 Offer 15 二進位制中1的個數

2021-10-10 17:29:59 字數 402 閱讀 9058

請實現乙個函式,輸入乙個整數(以二進位制串形式),輸出該數二進位制表示中 1 的個數。例如,把 9 表示成二進位制是 1001,有 2 位是 1。因此,如果輸入 9,則該函式輸出 2。

方法一:該方法需要經過二進位制長度次迴圈

解題思路:當n!=0時迴圈,利用n&1判斷n的最後一位是否為1,然後將n右移一位

public class solution 

return res;

}}

方法二:迴圈次數只與1的個數有關

解題思路:將n&(n-1)實現抹掉最右邊的1,每迴圈一次,去掉乙個1,返回迴圈次數

public class solution 

return res;

}}

劍指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 ...