【競技プログラミング】「Reverse Bits」with Python | LeetCode #190

Python

こちらは「Reverse Bits」のPythonによる解答例となっております。この問題は、32ビット符号なし整数のビット表現を反転する問題です。

問題

32ビット符号なし整数のビット表現を反転して返します。

解法

この問題は、ビット操作を用いた1つのアプローチがあります。ビット操作を使用すると、ビット表現を簡単に反転できます。

アルゴリズムの概要を以下に述べます。

  1. 入力された32ビット符号なし整数を2進数表現に変換します。
  2. 2進数表現を反転します。
  3. 反転した2進数表現を10進数表現に変換します。

Pythonコード

以下のコードが、「Reverse Bits」を解くためのPythonプログラムとなります。

### Function ##################################################################

def solve(num=0):
    
    solver  = Solution().reverseBits
    
    if 1 <= num <= Input().input: id_LIST = [num]
    else: id_LIST = [id+1 for id in range(Input().input)]
    
    for id in id_LIST:
        data    = Input(id)
        ans     = solver(data.n)
        result  = "OK" if ans==data.ans else "NG"
        print(f"[{str(id).zfill(3)}] {result}")

### Class #####################################################################

class Solution(object):
    # @param n, an integer
    # @return an integer
    def reverseBits(self, n):
        if isinstance(n, str): n = int(n,2)
        return int(bin(n)[2:].zfill(32)[::-1], 2)

#==============================================================================

class Input:
    
    def __init__(self, num=0):
        
        if num == 1:
            self.n = int("00000010100101000001111010011100",2)
            self.ans    = 964176192
        
        elif num == 2:
            self.n = int("11111111111111111111111111111101",2)
            self.ans    = 3221225471

        else:
            self.input  = 2

### Main ######################################################################

if __name__ == "__main__":

    solve()

###############################################################################