[]逆ビットleetcode

与えられた32ビットの符号なし2進整数を逆転させました。

 

例1:

入力: 00000010100101000001111010011100
 出力: 00111001011110000010100101000000を
 説明:入力バイナリ列00000010100101000001111010011100符号なし整数43261596        リターン964176192、バイナリ形式で表現される00111001011110000010100101000000

例2:

入力: 11111111111111111111111111111101
 出力: 10111111111111111111111111111111を
 説明:入力バイナリストリング11111111111111111111111111111101符号なし整数4294967293を、
      したがってそのバイナリ表現が3221225471である返し10101111110010110010011101101001。

 

ヒント:

  • (Javaなど)いくつかの言語では、何の符号なし整数型がありませんので、予めご了承ください。この場合には、入力と出力は、符号付き整数型として指定され、実装に影響を及ぼすべきではない整数を符号付きまたは符号なしの両方ので、内部のバイナリ表現は同じです。
  • Javaでは、コンパイラが使用する2の補数の符号付き整数を表す表記。したがって、上記で  例2  、入力が符号付き整数を表し  -3、符号付き整数を出力します  -1073741825

 

高度
あなたはこの関数を繰り返し呼び出す場合、あなたはどのようにあなたのアルゴリズムを最適化するのだろうか?


public class Solution {
    // you need treat n as an unsigned value
    public int reverseBits(int n) {
        int m = 0;
        for(int i=0;i<32;i++) {
            m<<=1;
            m = m |(n&1);
            n>>=1;
        }
        return m;
    }
}

 

公開された222元の記事 ウォンの賞賛238 ビュー310 000 +

おすすめ

転載: blog.csdn.net/kangbin825/article/details/105267863