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;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章