leetcode476數字的補數

1.題目描述


給定一個正整數,輸出它的補數。補數是對該數的二進制表示取反。

注意:

給定的整數保證在32位帶符號整數的範圍內。
你可以假定二進制數不包含前導零位。
示例 1:

輸入: 5
輸出: 2
解釋: 5的二進制表示爲101(沒有前導零位),其補數爲010。所以你需要輸出2。
示例 2:

輸入: 1
輸出: 0
解釋: 1的二進制表示爲1(沒有前導零位),其補數爲0。所以你需要輸出0。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/number-complement
 

2.python求解


我的思路1,輸入5,5對應的二進制是101,與全1的111異或就得到010,就是2啦,

引用其他人提交的結果,我覺得這個左移移的很耐斯呀

class Solution(object):
    def findComplement(self, num):
        """
        :type num: int
        :rtype: int
        """
        length = len(bin(num))-2 #二進制位數的長度
        n = (1 << length) - 1    #將1左移length位,並減1得到二進制數位全是1的長度位length的數
        return n ^ num #異或

作者:li-xian-sen
鏈接:https://leetcode-cn.com/problems/two-sum/solution/yi-huo-by-li-xian-sen/
來源:力扣(LeetCode)

我的思路2,輸入5,5對應的二進制是101,1逐位減,得到010,然後用2的多少次冪,求整數

 

class Solution(object):
    def findComplement(self, num):
        """
        :type num: int
        :rtype: int
        """
        num_bin = bin(num)
        num_bin = num_bin[2:len(num_bin)]
        sum = 0
        for i in range(len(num_bin)):
            sum += (1-int(num_bin[i]))*pow(2,len(num_bin)-i-1)
        return sum

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章