码迷,mamicode.com
首页 > 其他好文 > 详细

面试题 05.07. 配对交换

时间:2020-04-02 09:14:20      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:eve   nbsp   偶数   its   lse   public   数位   code   style   

题目:

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

示例1:

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

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

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

 

解答:

老实人方法:

class Solution {
public:
    int exchangeBits(int num) {
        int x1,x2;
        for(int i=1;i<32;i+=2){
            x1=num&(1<<i);
            x2=num&(1<<(i-1));
            if(x1){
                num|=(x1>>1);
            }
            else{
                if(x2){
                    num^=(1<<(i-1));
                }
            }
            if(x2){
                num|=(x2<<1);
            }
            else{
                if(x1){
                    num^=(1<<i);
                }
            }
        }
        return num;
    }
};

评论区方法,惊呆了:

先筛选出奇数位,再筛选出偶数位。前者右移一位,后者左移一位再求或。

class Solution {
public:
    int exchangeBits(int num) {
        int odd = 0x2aaaaaaa & num;
        int even = 0x15555555 & num;
        odd >>= 1;
        even <<= 1;
        return odd | even;
    }
};

 

面试题 05.07. 配对交换

标签:eve   nbsp   偶数   its   lse   public   数位   code   style   

原文地址:https://www.cnblogs.com/FdWzy/p/12617129.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!