美文网首页
颠倒二进制位

颠倒二进制位

作者: 3ni | 来源:发表于2018-11-15 17:23 被阅读0次

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

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

    class Solution:
        # @param n, an integer
        # @return an integer
        def reverseBits(self, n):
            b = []
            tn = n
            while tn:
                b.append(tn % 2)
                tn = tn / 2
            while len(b) != 32:
                b.append(0)
            return bintodec(b)
    def bintodec(bl):
        s = 0
        index = 1
        for i in bl[::-1]:
            s += i*index
            index *= 2
        return s
    

    上述代码思路就是先将数字分解为二进制,然后每一位反向进行权值相加,得出需要的结果。其实还有更好的方法,如下:

    class Solution:
        # @param n, an integer
        # @return an integer
        def reverseBits(self, n):
            r = 0
            for i in range(32):
                r = r << 1
                r = r | (n & 1)
                n = n >> 1
            return r
    

    这次的代码更简单,并且速度更快,主要思路预先定义一个数(r)为0,然后每次取n的最后一位,赋值给r的最后一位,然后r左移,n右移,最后就是所需的结果。
    用Python运行大约28ms,如果同样代码用c来写只需要4ms,还是c速度快啊。

    相关文章

      网友评论

          本文标题:颠倒二进制位

          本文链接:https://www.haomeiwen.com/subject/xjpyfqtx.html