zoukankan      html  css  js  c++  java
  • LeetCode刷题2——颠倒二进制位

    一、题目要求

     二、题目背景

     此题依旧属于位运算范畴

    知识点1:有符号和无符号二进制是怎样表现的?

    对于有符号数,最高位为1说明是个负数

    知识点2:进制之间的相互转换

    (1)十进制转十六进制

    hex(n)

    (2)十六进制转十进制

    int(str,16),其中str是16进制字符串

    (3)十进制转二进制

    bin(n) ,其中n就是十进制整数

    (4)二进制转十进制

    int(str,2)  其中str是二进制的字符串表现形式

     三、解题思路

    3.1 思路1

      (1)代码

    首先想到的就是将这个二进制字符串倒叙显示就可以了即S[::-1]

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

    (2)测试结果

    测试运行结果错误,结果见下图,在进行n转二进制时高位0被自动忽略,导致后续转换失败

    bin(43261596)
    '0b10100101000001111010011100'

    (3)优化

    设置一个格式,将整数转成二进制时高位补0   b='{:032b}'.format(n),    '{:32b}'.format(n)得到的结果就是高位不补0,运行结果如下

      

    3.2 思路2

    还可以通过移位的操作,执行用时比上面的更快

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

      

    四、进阶

    如果要多次调用这个函数,又该如何优化算法?

  • 相关阅读:
    Balanced Number [ZOJ 3416]
    动态树
    Jason的特殊爱好 [FZU 2113]
    Raney引理
    Tri Tiling [POJ 2663]
    糖尿病的虾青素+胰岛素疗法 (转)
    JAVASCRIPT 开发工具:aptana ,WebStorm
    众志和达,英文SOUL 存储与数据安全提供商
    健身音乐及其它
    nodejs + CompoundJS 资源
  • 原文地址:https://www.cnblogs.com/bethansy/p/11827958.html
Copyright © 2011-2022 走看看