[leetcode: Python]476. Number Complement

来源:互联网 发布:网络歌曲八万 编辑:程序博客网 时间:2024/06/12 08:18

Given a positive integer, output its complement number. The complement strategy is to flip the bits of its binary representation.

Note:
The given integer is guaranteed to fit within the range of a 32-bit signed integer.
You could assume no leading zero bit in the integer’s binary representation.
Example 1:

Input: 5Output: 2Explanation: The binary representation of 5 is 101 (no leading zero bits), and its complement is 010. So you need to output 2.

Example 2:

Input: 1Output: 0Explanation: The binary representation of 1 is 1 (no leading zero bits), and its complement is 0. So you need to output 0.

方法一:89ms
效率之低。。

class Solution(object):    def findComplement(self, num):        """        :type num: int        :rtype: int        """        s = ''.join(str(1-int(i)) for i in bin(num)[2:])        return int(s, 2)

方法二:55ms

class Solution(object):    def findComplement(self, num):        """        :type num: int        :rtype: int        """        n = num        i = 0        while (n != 0):            n = n / 2            i = i + 1        return pow(2, i) - num - 1

方法三:32ms

class Solution(object):    def findComplement(self, num):        """        :type num: int        :rtype: int        """        return num ^ 2 ** (len(bin(num))-2) - 1