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
    

      

    四、进阶

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

  • 相关阅读:
    html bottom html submit按钮表单控件与CSS美化
    Extjs4.0以上版本智能提示的方法
    Delete from join 用法
    vs2015开发Windows服务
    -bash: Chmod: command not found
    使用OpenPop.dll开发读取POP3邮件程序
    邮箱学堂:SPF详解
    js中escape对应的C#解码函数 UrlDecode
    json字符串CSS格式化
    Sql server not in优化
  • 原文地址:https://www.cnblogs.com/bethansy/p/11827958.html
Copyright © 2011-2022 走看看