配對交換(力扣)

配對交換(力扣)


描述

配對交換。編寫程序,交換某個整數的奇數位和偶數位,儘量使用較少的指令(也就是說,位0與位1交換,位2與位3交換,以此類推)。

示例1:

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

示例2:

輸入:num = 3
輸出:3

提示:

num的範圍在[0, 2^30 - 1]之間,不會發生整數溢出。


題解

根據題目分析,基本採用位運算的方式,可使代碼段更加簡潔。

基本思路

取奇數位向右移一位得到A,取偶數位左移一位得到B,再將A與B做或運算,即可得到最終答案,至於如何利用位運算得到A和B?只要獲取奇數位和偶數位即可,即採用和兩個特殊的數字進行與運算得到。
ODD_BIT_BASK = 0xaaaaaaaa
EVEN_BIT_BASK = 0x55555555

代碼段

class Solution {
public:
    int exchangeBits(int num) {
    	const int ODD_BIT_MASK = 0xaaaaaaaa;
    	const int EVEN_BIT_MASK = 0x55555555;
        return (ODD_BIT_MASK & num) >> 1 | (EVEN_BIT_MASK & num) << 1;
    }
}; 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章