1. 程式人生 > >數字的補數(LeetCode)

數字的補數(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

'''