算法编程(十四):颠倒二进制位

94 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情

写在前面

今天的这道题《颠倒二进制位》,可以说很考验基础知识,因为这个涉及到的知识点虽然主要是二进制相关。

但是要解答出这道题,还要很扎实的基础才行。

下面一起来看一下除了二进制还有哪些重要的知识点吧。

image.png

题目解读

本道题的题目描述很长,主要还是提示部分,也是为了给人们一个正确的引导,以便大家计算出正确的结果。

从头至尾就是要把一个二进制数字颠倒过来后,转成一个正常的十进制数字。

从示例中,我们也可以看出来,正是这样写的。

我最一开始就是想要循环来搞定这道题,后来一想好像还不行,效率太低了。

后面就开始使用位运算等计算方式来处理。

一时间没有找到Java的相关工具类,不然可以参考一下Java中如何实现的。

代码实现

本次运行代码如下,代码不多很简洁,但是基础不扎实的根本就不容易懂,我也是恶补了一下位运算相关知识。

public class Solution {
    // you need treat n as an unsigned value
    public int reverseBits(int n) {
        int result = 0;
        for(int i = 1; i <= 32 && n != 0; i++){
            int z = n & 1;
            int index = 32 - i;
            n = n >>> 1;
            z <<= index;
            result |= z;
        }
        return result;
    }
}

执行结果:

这次的执行结果很满意,总体来说还是说的过去的。

image.png

其他思路

其他思路嘛,有些大佬在使用分治法,不过我有点不太理解,大家如果有兴趣倒是可以去了解一下。

总结

本道题主要考察点在于,对二进制的理解,和对位运算、位或运算符等基础知识点的使用是否熟练,只要对这些使用妥当,这道题自然也不在话下。