輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。
版本1思路:target --> 原碼 --> 反碼 --> 補碼。
public
class
solution
if(target<0)
for(i=
0;number>
0;i++)if
(target>0)
}}if(target<0)
else
}for
(i=0
;i<
32;i++)if
(target_bit[i]==2
)}for(i=
0;i<
33;i++)}
}return result;
}}
測試程式:
class
solution
if(target<0)
for(i=
0;number>
0;i++)if
(target>0)
}}if(target<0)
else
}for
(i=0
;i<
32;i++)if
(target_bit[i]==2
)}for(i=
0;i<
33;i++)}
}return result;}}
public
class
main
}
版本2
思路:對於n,分解成二進位制01組成的數字串,對於最後乙個二進位制n的最後乙個1,n-1就會消去最後1(1後面的0會反轉成1)。所以n&(n-1)就會保留最後乙個1前面的數字串,1及後面的0會變成0。有多少1就會做多少次運算。
過程: 10的運算
}}版本3
思路:比較簡單就是二進位制n右移,右移後與1相與,末位是1則cnt加1,是0不變。
**:
public
class
solution
return cnt;
}}
版本3.2
沒太理解,可能跟位圖有關係。待續~
public
class
solution
}
本節乙個小問題牽扯到很多東西,有各種聰明的人以你想不到的方式對此做出解答。繼續加油吧!
1、原碼, 反碼, 補碼 詳解
2、演算法-求二進位制數中1的個數
3、試題廣場 > 二進位制中1的個數
劍指Offer 11 二進位制中1的個數
思路 如果乙個整數不為0,那麼這個整數至少有一位是1。如果我們把這個整數減1,那麼原來處在整數最右邊的1就會變為0,原來在1後面的所有的0都會變成1 如果最右邊的1後面還有0的話 其餘所有位將不會受到影響。舉個例子 乙個二進位制數1100,從右邊數起第三位是處於最右邊的乙個1。減去1後,第三位變成0...
劍指offer 11 二進位制中1的個數
輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。用1 1自身左移運算,其實後來就不是1了 和n的每位進行位與,來判斷1的個數 public class solution11 flag flag 1 return count public static void main strin...
《劍指Offer》11 二進位制中1的個數
題目 11.二進位制中1的個數 知識點 位運算 題目描述 輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。解題思路 解法一 這是我當時自己的思路,即通過除二取餘法來求輸入的十進位制數字的二進位制的每一位,再判斷其是否為一,當輸入數字為負數的時候,取其補碼 原數字取反加一 我使用的取...