当前位置:   article > 正文

leetcode配对交换(面试题)

leetcode配对交换(面试题)

题目

配对交换。编写程序,交换某个整数的奇数位和偶数位,尽量使用较少的指令(也就是说,位0与位1交换,位2与位3交换,以此类推)。

示例1:

输入:num = 2(或者0b10)
输出 1 (或者 0b01)
示例2:

输入:num = 3
输出:3
提示:

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/exchange-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解思路

  • 假设输入的数字位数是abcd,而我们要求输出的是badc
  • 其中a 和 c的顺序是不变的,b和d的顺序是不变的
    a和c当当与abcd的ac往右边移动一位,而忽略bd
    也就是按位1010 与 abcd 进行与运算,运算后的结果是ac,并且向右位移。
    同理可得 bd是与0101进行与运算,并将结果向左边移动一位。
    两个移动位置的结果做或运算并输出。

代码

class Solution {
public:
    int exchangeBits(int num) {
       return ( ((num & 0xaaaaaaaa)>>1)|((num & 0x55555555)<<1) );
    }
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/87286
推荐阅读
相关标签
  

闽ICP备14008679号