LeetCode-191-ビット数1(単純)


1.説明

関数を記述します。入力は符号なし整数で、「1」(ハミング重みとも呼ばれます)のバイナリ式の桁数を返します。

2.例

入力:00000000000000000000000000001011
出力:3
説明:入力バイナリストリング00000000000000000000000000001011では、合計3ビットが「1」です。

入力:00000000000000000000000010000000
出力:1
説明:入力バイナリストリング00000000000000000000000010000000では、合計1ビットが「1」です。

入力:11111111111111111111111111111101
出力:31
説明:入力バイナリストリング11111111111111111111111111111101では、合計31ビットが「1」です。

促す

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

3.分析

正の整数は3で、そのバイナリ表現は "0000 0011"です。次の表に示すように、3に対して3&(3-1)演算を実行します。

オペレーティング 整数表現 バイナリ表現
0000 0011
3 -1 = 2 0000 0010
= 2 0000 0010

3&(3-1)の結果2に対して2&(2-1)演算を続行します。

オペレーティング 整数表現 バイナリ表現
2 0000 0010
2 -1 = 1 0000 0001
= 0 0000 0000

上記の2つのテーブルを観察すると、予備的な結論を導き出すことができます。3のバイナリ表現には2 1があり、2&演算の後、結果は0になります。

負の数の別の例を見てみましょう。
負の数は(-125)で、その2進数表現は「1000 0011」です。

(-125)で(-125)&(-125-1)操作を実行します。プロセスは次の表に示されています。

オペレーティング 整数表現 バイナリ表現
-125 1000 0011
-125-1 = -126 1000 0010
= -126 1000 0010

(-125)&(-125-1)の結果(-126)に対して&処理を続行します。プロセスは次の表に示されています。

オペレーティング 整数表現 バイナリ表現
-126 1000 0010
-126-1 = -127 1000 0001
= -128 (1)1000 0000

(-126)&(-126-1)の結果(-128)に対して&操作を続行します。プロセスは次の表に示されています。

オペレーティング 整数表現 バイナリ表現
-128 (1)1000 0000
-128-1 = -129 (1)0111 1111
= 0 0000 0000

これらの3つのテーブルを観察すると、結論を出すこともできます:(-125)バイナリには3 1があります。3&演算の後、結果は0になります。

結論:
整数nnnのバイナリストリング内の1の数、nnと等しいn&(nnn -1)操作の数。

4.コード

public class Solution {
    
    
    // you need to treat n as an unsigned value
    public int hammingWeight(int n) {
    
    
        int numOneBits = 0;
        while(n != 0)
        {
    
    
            n = n & (n - 1);
            ++numOneBits;
        }
        return numOneBits;
    }
}

しかし、より単純なコードがあります:

public class Solution {
    
    
    // you need to treat n as an unsigned value
    public int hammingWeight(int n) {
    
    
        return Integer.bitCount(n);
    }
}

5.検証

ここに画像の説明を挿入
ここに画像の説明を挿入

6.ソース

  1. LeetCode 191.ビット数1
    出典:LeetCode
    リンク:https ://leetcode-cn.com/problems/number-of-1-bits
    著作権はLeetcode Networkが所有してます。

おすすめ

転載: blog.csdn.net/PursueLuo/article/details/108738635