您的位置:首页 > 娱乐 > 八卦 > 配对交换00

配对交换00

2024/12/23 6:42:18 来源:https://blog.csdn.net/weixin_51628158/article/details/139776711  浏览:    关键词:配对交换00

题目链接

配对交换

题目描述

注意点

  • num的范围在[0, 2^30 - 1]之间,不会发生整数溢出

解答思路

  • 第一个思路是每次取奇数位和偶数位,将两位上的数字交换并根据其所处的位置求得的值与res相加,重复此过程即可
  • 第二个思路是将所有的奇数位和偶数位都取出来,并将奇数位都向左移动一位,偶数位都向右移动一位,再将移动后的奇数位和偶数位相加(也就是’|'操作)即可

代码

方法一:

class Solution {public int exchangeBits(int num) {int res = 0;int i = 0;while (i < 32) {int one = (num & 1);if (one == 1) {res += Math.pow(2, i + 1);}num >>= 1;int two = (num & 1);if (two == 1) {res += Math.pow(2, i);}num >>= 1;i += 2;}return res;}
}

方法二:

class Solution {public int exchangeBits(int num) {// 奇数int odd = num & 0x55555555;// 偶数int even = num & 0xaaaaaaaa;odd = odd <<< 1;even = even >>> 1;return odd | even;}
}

关键点

  • 位运算的相关操作
  • 求奇数位的方式是与0x55555555进行’&‘操作,求偶数位的方式是与0xaaaaaaaa进行’&'操作

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com