写在前面
今天的这道题《颠倒二进制位》,可以说很考验基础知识,因为这个涉及到的知识点虽然主要是二进制相关。
但是要解答出这道题,还要很扎实的基础才行。
下面一起来看一下除了二进制还有哪些重要的知识点吧。
题目解读
本道题的题目描述很长,主要还是提示部分,也是为了给人们一个正确的引导,以便大家计算出正确的结果。
从头至尾就是要把一个二进制数字颠倒过来后,转成一个正常的十进制数字。
从示例中,我们也可以看出来,正是这样写的。
我最一开始就是想要循环来搞定这道题,后来一想好像还不行,效率太低了。
后面就开始使用位运算等计算方式来处理。
一时间没有找到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; } }
执行结果:
这次的执行结果很满意,总体来说还是说的过去的。
其他思路
其他思路嘛,有些大佬在使用分治法,不过我有点不太理解,大家如果有兴趣倒是可以去了解一下。
总结
本道题主要考察点在于,对二进制的理解,和对位运算、位或运算符等基础知识点的使用是否熟练,只要对这些使用妥当,这道题自然也不在话下。