「leetcode」顛倒二進位制位
阿新 • • 發佈:2018-12-02
題目
顛倒給定的 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)
好吧,我與大佬的距離就是不懂那麼多的函式呼叫(手動滑稽)。