【LeetCode 简单题】45- 颠倒二进制位

声明:

今天是第45道题。颠倒给定的 32 位无符号整数的二进制位。以下所有代码经过楼主验证都能在LeetCode上执行成功,代码也是借鉴别人的,在文末会附上参考的博客链接,如果侵犯了博主的相关权益,请联系我删除

(手动比心ღ( ´・ᴗ・` ))

正文

题目:颠倒给定的 32 位无符号整数的二进制位。

示例:

输入: 43261596
输出: 964176192
解释: 43261596 的二进制表示形式为 00000010100101000001111010011100 ,
     返回 964176192,其二进制表示形式为 00111001011110000010100101000000 

进阶:
如果多次调用这个函数,你将如何优化你的算法?

解法1。 利用format函数将输入n转为32位无符号二进制数,再逆转,用int函数转为10进制数并返回。耗时28 ms, 在Reverse Bits的Python提交中击败了94.94% 的用户,代码如下。

class Solution:
    # @param n, an integer
    # @return an integer
    def reverseBits(self, n):
        # 先用format函数把n转为1个32位的无符号二进制数,用list存放
        n_2 = list('{:032b}'.format(n))
        # 然后逆转这个二进制数
        len_n = len(n)
        for i range(len_n):
            n_2[i], n_2[len_n-1-i] = n_2[len_n-1-i], n_2[i]
        # n_2此时还是1个list,应该转为1个完整的字符串
        n_rev = ''.join(n_2)
        # 把字符串强制转换为int整型数字并返回,注意这里n_rev是2进制数,所以要指定base为2,不然默认认为是10进制数了
        return int(n_rev, 2)

解法2。其实还有更简化的方法,思路、效率和上面一样,但不知道鲁棒性如何。上面的方法其实有点绕,str转list,然后又转str,下面这种方法,只利用str的特性。耗时28 ms, 在Reverse Bits的Python提交中击败了94.94% 的用户,代码如下。

class Solution:
    # @param n, an integer
    # @return an integer    
    def reverseBits(self, n):
        n_2 = '{:032b}.format(n)'
        n_2 = n_2[::-1]
        return int(n_2, 2)

 解法3。除了用format函数将10进制转为2进制外,还有bin函数,只是bin函数只把10进制转为2进制,不会自动补位成32位,且用‘0b’开头,所以多1步操作,耗时28 ms, 第1种解法在Reverse Bits的Python提交中击败了94.94% 的用户,第2种解法耗时24 ms, 在Reverse Bits的Python提交中击败了99.92% 的用户,代码如下。

class Solution:
    # @param n, an integer
    # @return an integer
    def reverseBits(self, n):
        # 解法3 V 1.0:步步为营的版本
        n_2 = bin(n)[2:]    # [:2]是‘0b’,不取
        len_n_2 = len(n_2)
        n_2 = '0'*(32-len_n_2) + n_2    # 在此最高位补0补成32位
        n_2 = n_2[::-1]
        return int(n_2,2)
        

        # 解法3 V 2.0:一步到位的版本
        return int(bin(n)[2:].zfill(32)[::-1], 2)
        

结尾

解法1:https://blog.csdn.net/qq_34364995/article/details/80544458

解法2:原创

解法3:https://blog.csdn.net/ma412410029/article/details/80528252       https://www.cnblogs.com/MartinLwx/p/9695441.html

猜你喜欢

转载自blog.csdn.net/weixin_41011942/article/details/83175840
今日推荐