/**
* 二進制中1的個數
* <p>
* 請實現一個函數,輸入一個整數,輸出該二進制表示中1的個數
* <p>
* n = 111111111111
* 1=00000000001
* 如果最後一位爲1 那麼&之後就是1,否則爲0,相加即可。
* >>右移 整數高位補0 負數補1
* >>>無符號右移 高位都補0
* 不用>>而用>>>是爲了兼容負數
*
* @param n
* @return
*/
public int numberOf1(int n) {
int res = 0;
while (n != 0) {
res += (n & 1);
n >>>= 1;
}
return res;
}
/**
* 二進制中1的個數
* <p>
* 可以更快速的計算,比如下面的列子
* <p>
* n = 9
* n 1001
* n-1 1000
* n&(n-1) 1000 & 1001 =1000
* n 1000
* n-1 0111
* n = 0
*
* @param n
* @return
*/
public int numberOf11(int n) {
int res = 0;
while (n != 0) {
res++;
n = (n - 1) & n;
}
return res;
}
劍指Offer學習-面試題15:二進制中1的個數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.