zoukankan      html  css  js  c++  java
  • LeetCode190:颠倒二进制(位运算分治! 时间复杂度O(1))

     解题思路:这道题很两种解法,常规的就是O(n),另一种就是巧妙的利用位运算实现分治,时间复杂度O(1),类似于归并排序。不过这个递归不是自顶向下,而是巧用位运算从自底向上实现。

    比如01001000通过这种方法得到00010010

    class Solution:
        def reverseBits(self, n) -> int:
            m1 = int('10101010101010101010101010101010',2)
            m2 = int('11001100110011001100110011001100',2)
            m3 = int('11110000111100001111000011110000',2)
            m4 = int('11111111000000001111111100000000',2)
            m5 = int('11111111111111110000000000000000', 2)
        #自底向上
            n = ((n&m1)>>1) | ((n&(m1>>1))<<1)
            n = ((n&m2)>>2) | ((n&(m2>>2))<<2)
            n = ((n&m3)>>4) | ((n&(m3>>4))<<4)
            n = ((n&m4)>>8) | ((n&(m4>>8))<<8)
            n = ((n&m5)>>16)| ((n&(m5>>16))<<16)
            return n    
  • 相关阅读:
    assign、weak
    iOS 使用 github
    iOS 知识点
    thinkphp 具体常量,在view里面使用
    一个php+jquery+json+ajax实例
    php pdo操作
    nginx缓存
    php模版静态化技术
    php模版静态化原理
    thinkphp实现多数据库操作
  • 原文地址:https://www.cnblogs.com/ISGuXing/p/14592920.html
Copyright © 2011-2022 走看看