1. 程式人生 > >「leetcode」顛倒二進位制位

「leetcode」顛倒二進位制位

題目

顛倒給定的 32 位無符號整數的二進位制位。

示例:

輸入: 43261596
輸出: 964176192
解釋: 43261596 的二進位制表示形式為 00000010100101000001111010011100 ,
     返回 964176192,其二進位制表示形式為 00111001011110000010100101000000

解答:

class Solution:
    # @param n, an integer
    # @return an integer
    def reverseBits(self, n):
        new_list = []
        for i in bin
(n)[2:]: new_list.append(i) while len(new_list) != 32: new_list.insert(0,'0') new_number = ''.join(new_list[::-1]) return int(new_number,2)

常規操作,利用 bin() 函式求出二進位制表示,觀察發現題目所給的二進位制不夠 32 位前面補 0 。所以用了 while 迴圈判斷。最後在裝換成十進位制。

寫完,不行,要優化一下:

class
Solution: # @param n, an integer # @return an integer def reverseBits(self, n): new_list = [i for i in bin(n)[2:]] while len(new_list) != 32: new_list.insert(0,'0') new_list.reverse() return int(''.join(new_list),2)

顛倒列表用了方法 reverse() 。

看看大佬程式碼:

class Solution:
    # @param n, an integer
    # @return an integer
    def reverseBits(self, n):
        return int(bin(n)[2:].zfill(32)[::-1], base=2)

好吧,我與大佬的距離就是不懂那麼多的函式呼叫(手動滑稽)。