11 圖解劍指Offer 二進制中1的個數 Java題解
題目鏈接
題目描述
輸入一個整數,輸出該數32位二進制表示中1的個數。其中負數用補碼錶示。
題解:
n & (n - 1)的左右是消除最右邊的1,每循環一次count++,即可求出1的個數,while循環直到 n 等於0。
圖解:
代碼:
public class Solution {
public int NumberOf1(int n) {
int count = 0;
while(n != 0){
count++;
n = n & (n - 1);
}
return count;
}
}
複雜度
空間複雜度: 空間複雜度爲O(1)
最壞時間複雜度: 遍歷時間複雜度O(n)