leetcode 面试题 05.07. 配对交换

【题目】面试题 05.07. 配对交换

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

示例1:

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

示例2:

 输入:num = 3
 输出:3

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

【解题思路1】获取奇数位/偶数位再合并

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

【解题思路2】获取num的每位

然后通过判断奇数位还是偶数位再左移到指定的位置的方式实现

class Solution {
    public int exchangeBits(int num) {
        int ans = 0, count = 0;
        while (num > 0) {
            int last = (num & 1); //取得num的最后一位
            num >>= 1;
            if (count % 2 == 0)
                last <<= 1 * (count + 1); 
            else 
                last <<= 1 * (count - 1);
            ans |= last;
            count++;
        }
        return ans;
    }
}
class Solution {
    public int exchangeBitsTwo(int num) {
        int result = 0;
        int addCount = 0;
        while (num != 0){
            int last = num & 1;
            num >>= 1;
            addCount++;
            if (addCount % 2 == 0){
                last <<= (addCount - 2);
            }else {
                last <<= addCount;
            }
            result |= last;
        }
        return result;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章