• 190. Reverse Bits


    原题链接:https://leetcode.com/problems/reverse-bits/description/
    实现如下:

    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * Created by clearbug on 2018/2/26.
     */
    public class Solution {
    
        public static void main(String[] args) {
            Solution s = new Solution();
            System.out.println(s.reverseBits(2));
            System.out.println(s.reverseBits(43261596));
        }
    
        /**
         * 这道题目虽然是easy级别的,但是我却觉得不大easy。刚开始我的思路完全受限于“或、与、非、异或”这四种位操作的组合上了,以为会有什么巧妙的
         * 组合能解决问题呢。。。没想到普通的移位操作用好了也能有神奇的效果!下面是讨论区别人的答案啦!
         *
         * 提交结果:beats 17.40%, runtime: 4ms
         *
         * @param n
         * @return
         */
        // you need treat n as an unsigned value
        public int reverseBits(int n) {
            int result = 0;
            for (int i = 0; i < 32; i++) {
                result += n & 1;
                n >>>= 1; // CATCH: must do unsigned shift
                if (i < 31) { // CATCH: for last digit, don't shift!
                    result <<= 1;
                }
            }
            return result;
        }
    
        // 然后答案的原作者又提出了一种多次调用情况下使用 HashMap 做缓存来提高效率的做法
        // 当然了,下面的评论里面还有更简洁更高效的方法,思路基本差不多,只不多优化了细节:
        public int reverseBits2(int n) {
            int result = 0;
            for(int i=0; i<32; i++){
                result <<= 1;
                result += n&1;
                n >>= 1;
            }
            return result;
        }
    
    }
    
  • 相关阅读:
    进程,进程
    hmac和socketserver
    下载Eclipse、下载Java各个版本,来这里就对了
    Java循环语句怎么用?经典排序算法见真知
    CSS基本语法
    Html属性标签
    HTML标记大全参考手册
    composer 安装Laravel (win10)
    composer 安装(win)
    GIT
  • 原文地址:https://www.cnblogs.com/optor/p/8688394.html
Copyright © 2020-2023  润新知