1ビットの191番号
イージー
符号なし整数をとる関数を記述し、それは(としても知られている「1」のビットの数を返す ハミング重みが)。
例1:
入力:00000000000000000000000000001011
出力:3
説明:入力バイナリ文字列00000000000000000000000000001011 has a total of three '1' bits.
例2:
入力:00000000000000000000000010000000 出力:1 説明:入力バイナリストリング00000000000000000000000010000000一「1」ビットの合計を有します。
例3:
入力:11111111111111111111111111111101 出力:31 説明:入力バイナリストリング11111111111111111111111111111101は31「1」ビットの合計を有します。
注意:
- Javaなどの一部の言語では、何の符号なし整数型が存在しないことに注意してください。この場合、入力が符号付き整数型として説明すると、整数の内部バイナリ表現は、それは符号の有無と同じであるように、実装に影響を与えるべきではありません。
- Javaでは、コンパイラが使用して符号付き整数を表し、 2の補数表記を。したがって、入力上の実施例3の符号付き整数を表します
-3
。
ファローアップ:
この関数が何回呼び出された場合、どのようにそれを最適化するのでしょうか?
パッケージleetcode.easy。 パブリッククラスNumberOf1Bits { //あなたは符号なしの値として扱うのnする必要が 公共のint型hammingWeight1(int型のn){ int型のビット= 0; INT = 1マスク。 以下のために(INT i = 0; iが<32; I ++){ IF((N&マスク)!= 0){ ビット++。 } マスク<< = 1。 } ビットを返します。 } 公共INT hammingWeight2(int型N){ int型の和= 0。 一方、(N!= 0){ 合計++。 N&=(N - 1)。 } の和を返します。 } @ org.junit.Test 公共ボイド試験(){ System.out.printlnは(hammingWeight1(-3))。 System.out.println(hammingWeight2(-3))。 } }