【LeetCode-190】 Reverse Bits(C++)

博客介绍了如何使用C++解决LeetCode的190题,即反转32位无符号整数的二进制位。作者分享了三种解题方法,包括原始的转换为二进制数组再反转的思路,以及两种利用位运算优化的解决方案,重点讲解了位运算的巧妙运用。
摘要由CSDN通过智能技术生成

题目要求:要求将一个32位无符号整数所对应的二进制位反转得到的无符号整数。

解题思路:一般这种对应于二进制位的题目要考虑位运算!!而我可能对于位运算不太熟悉,每次都是用最愚蠢的办法做,虽然AC了,但是看了别人的解决方法才觉得自己好蠢,一开始我的想法就是将32位无符号整数化为二进制,存到一个含有32个元素的数组里,然后再反着计算。真是太傻了!!!!代码1,我就不多说了,随便看看应该就能看懂。

考虑位运算的方法是看了别人的解题思路写出来的,基本思想就是首先令fool=0,取得n的最后一位与fool相或,这个时候fool里面存的即使n的最后一位,然后将fool左移一位,这时n的最后一位变成了fool的第一位,并且fool的最后一位为0。将n右移一位,这时原来n的倒数第二位就成了现在的倒数第一位,取出这一位,然后与fool相与,这时fool的最后一位存的是n中的倒数第二位……,循环下去直到n的第一位被存到fool的最后一位中。当然这种方法的for循环中有很多种实现方法,可以每次右移n,也可以设置一个mask,每次左移mask。mask的作用是取得n的相应位,然后再右移。然后再与fool相与。

最后一种方法,真的是太神奇了!没有用到循环,具体思路见代码3注释。

代码实现:

1.

class Solution {
public:
    uint32_t reverseBits(uint32_t n) {
        int a[32];
        int i=0;
        uint32_t result&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值