• 190. Reverse Bits


    一、题目

      1、审题

      

      2、分析

        给出一个 32位的无符号整形,将其二进制形式进行翻转,求出反转后的二进制代表的数值。

    二、解答

      1、思路:

        方法一、

          采用位运算符进行运算。

          ①、n & 1 可以取到 n 的最后一位二进制位 end;

          ②、n >>>= 1,n 无符号右移一位

          ③、result <<= 1, result |= end; result 左移一位,且将 end 添加在 result 尾部。

        public int reverseBits(int n) {
            int result = 0;
            for(int i = 0; i < 32; i++) {
                int end = n & 1; // 计算 n 的最后一位
                n >>>= 1;        // n 无符号右移一位
                result <<= 1;    // result 左移一位
                result |= end;   // result 添加 n 的末尾一位
            }
            return result;
        }

      优化:

         当此方法需要被多次调用时,可以将 n 分成 4 份 8 bit ;

       且将用到的 8bit 二进制的翻转存入到一个 Map 作为 cache。

        public int reverseBits(int n) {
            byte[] bytes = new byte[4];
            for (int i = 0; i < 4; i++) 
                bytes[i] = (byte)((n >>> 8*i) & 0xFF);
            
            int result = 0;
            for(int i = 0; i < 4; i++) {
                result <<= 8;
                result += reverseByte(bytes[i]);
            }
            return result;
        }
        
        private int reverseByte(byte b) {
            Integer value = cache.get(b);
            if(value != null)
                return value;
            
            value = 0;
            for(int i = 0 ; i < 8; i++) {
                value <<= 1;
                value += ((b >>> i) & 1);
            }
            cache.put(b, value);
            return value;
        }
  • 相关阅读:
    爱福窝在线装修设计软件测评
    关于简书首页模式的思考和畅想
    这些O2O比你们更靠谱儿
    iOS动画——Layer Animations
    最大流, 最小割问题及算法实现
    浅谈iOS学习之路
    iOS架构师之路:慎用继承
    iOS架构师之路:控制器(View Controller)瘦身设计
    IOS中的编码规范
    关闭键盘导致tableView:didSelectRowAtIndexPath:失效解决办法
  • 原文地址:https://www.cnblogs.com/skillking/p/9806654.html
Copyright © 2020-2023  润新知