天天看點

二進制中1的個數(Java)牛客連結題目解題思路代碼實作

牛客連結

二進制中1的個數

題目

輸入一個整數,輸出該數32位二進制表示中1的個數。其中負數用補碼表示。

解題思路

如果一個數 -1 ,二進制中的表示為最右邊的一個1變為0,後面的所有0變為1。

例如12(1100)減去1,則變為11(1011),轉變過程為:

1100 -> 1000(先将最右邊的1變為0) -> 1011(再将後面的0變為1)

此時将目前的值,與減去1後的值按位與(1100&1011) 就得到了1000(相當于已經計算了一個1,讓count++) 重複上述步驟 直到最後的值為0即可。

代碼實作

public class Solution {
    public int NumberOf1(int n) {
        int count = 0;
        while(n!=0) {
            count++;
            n = n&(n-1);
        }
        return count;
    }
}