こちらは「Number Of 1Bits」のPythonによる解答例となっております。この問題は、符号なし整数が与えられたときに、その中に含まれる1の数を返す問題です。
問題
符号なし整数 n が与えられたとき、その中に含まれる1のビット数を返します。
- 0 <= n <= 2^31 – 1
解法
この問題は、ビット操作を用いたアプローチがあります。ビット演算子 & を使用して、2進数表現での各ビットを検査し、1の数をカウントします。
アルゴリズムの概要を以下に述べます。
- カウント用の変数を初期化します。
- n が 0 になるまで、n の最後のビットが 1 である場合、カウントをインクリメントします。
- n を右にシフトします。
Pythonコード
以下のコードが、「Number of 1 Bits」を解くためのPythonプログラムとなります。
### Function ##################################################################
def solve(num=0):
solver = Solution().hammingWeight
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):
def hammingWeight(self, n):
"""
:type n: int
:rtype: int
"""
return bin(n)[2:].count('1')
#==============================================================================
class Input:
def __init__(self, num=0):
if num == 1:
self.n = int("00000000000000000000000000001011",2)
self.ans = 3
elif num == 2:
self.n = int("00000000000000000000000010000000",2)
self.ans = 1
elif num == 3:
self.n = int("11111111111111111111111111111101",2)
self.ans = 31
else:
self.input = 3
### Main ######################################################################
if __name__ == "__main__":
solve()
###############################################################################