1. 程式人生 > >劍指Offer-Python-二進位制中1的個數

劍指Offer-Python-二進位制中1的個數

題目

輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示。

思路:
暴力解決:分為兩種情況:一種整數n>=0,直接化為二進位制.一種n<0,求其補碼。其中求補碼的方法為將其用原碼錶示,然後從右邊第一個為‘1’的數起往左依次取反(取反操作即與1異或,0^1=1,1^1=0)。
注意:該題是32位。

程式碼

# -*- coding:utf-8 -*-
class Solution:
    def NumberOf1(self, n):
        # write code here
        if n >= 0:
            num =  ('{:032b}'
.format(n)) else: res = ('{:032b}'.format(-n))[1:] num = '1' flag = 0 for i in range(len(res)-1,-1,-1): if res[i] == '1': index = i flag = 1 break if flag: for
i in res[:index]: num += str(int(i) ^ 1) num += res[index:] else: num += res print(num,len(num)) return num.count('1')