LeetCode Python 476. 数字の補数

1015 ワード

正の整数を指定し、その補数を出力します.補数はその数のバイナリ表現に対して逆をとる.
注意:
  • によって与えられた整数は、32ビット符号付き整数の範囲内で保証される.
  • バイナリ数にプリアンブルゼロビットが含まれていないと仮定できます.

  • 例1:
      : 5
      : 2
      : 5       101(      ),    010。       2。
    

    例2:
      : 1
      : 0
      : 1       1(      ),    0。       0。
    class Solution(object):
        def findComplement(self, num):
            """
            :type num: int
            :rtype: int
            """
            i = 1
            while num >= i:
                num ^= i
                i <<= 1
            return num

    より速い解法を見てみましょう.
    class Solution(object):
        def findComplement(self, num):
            """
            :type num: int
            :rtype: int
            """
            return 2**(len(bin(num))-2)-1-num 

    上のbin(num)は文字列タイプに戻り、2進数で0 bの2つの要素が増えた.例えばnum=5 bin(num)が返す文字列は、「0 b 101」である.