数字的补数(LeetCode)

给定一个正整数,输出它的补数。补数是对该数的二进制表示取反。

注意:

  1. 给定的整数保证在32位带符号整数的范围内。
  2. 你可以假定二进制数不包含前导零位。

示例 1:

输入: 5
输出: 2
解释: 5的二进制表示为101(没有前导零位),其补数为010。所以你需要输出2。

示例 2:

输入: 1
输出: 0
解释: 1的二进制表示为1(没有前导零位),其补数为0。所以你需要输出0。

class Solution:
    def findComplement(self, num):
        """
        :type num: int
        :rtype: int
        """
        n = num
        ss = ""
        while(n>=1):
            if(n/2!=int(n/2)):
                ss = ss + "1"
            else:
                ss = ss + "0"
            n = int(n/2)

#先求出n的二进制形式,此处用的是求余法。除二余一的话,在该位置有一,否则就是零
        j = 0
        k = 0

#通过n的二进制形式求补码
        for i in ss:
            if(i=='0'):
                j = j + 2**k
            k += 1
        return j

'''

膜拜一下大佬的解法

class Solution:

def findComplement(self, num):

"""

:type num: int

:rtype : int

"""

n = 2

while n <= num:

    n <<= 1 #位运算

return n-1-num

'''

猜你喜欢

转载自blog.csdn.net/weixin_41169182/article/details/85042168
今日推荐