こちらは「Reverse Bits」のPythonによる解答例となっております。この問題は、32ビット符号なし整数のビット表現を反転する問題です。
問題
32ビット符号なし整数のビット表現を反転して返します。
解法
この問題は、ビット操作を用いた1つのアプローチがあります。ビット操作を使用すると、ビット表現を簡単に反転できます。
アルゴリズムの概要を以下に述べます。
- 入力された32ビット符号なし整数を2進数表現に変換します。
- 2進数表現を反転します。
- 反転した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()
###############################################################################