面試題 05.07. 配對交換
阿新 • • 發佈:2021-12-10
配對交換。編寫程式,交換某個整數的奇數位和偶數位,儘量使用較少的指令(也就是說,位0與位1交換,位2與位3交換,以此類推)。
示例1:
輸入:num = 2(或者0b10)
輸出 1 (或者 0b01)
示例2:
輸入:num = 3
輸出:3
提示:
num的範圍在[0, 2^30 - 1]之間,不會發生整數溢位。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/exchange-lcci
參考:
解題思路
如果一對一對地交換,必定有很多困難。
因此可以先操作奇數位,再操作偶數位。
對於奇數位,使用 101010(即 0xAA)作為掩碼,提取奇數位,並把它們右移一位;
對於偶數位,使用 010101(即 0x55)作為掩碼,提取偶數位,並把它們左移一位。
最後,將兩次操作的結果合併成一個值。
python
class Solution: def exchangeBits(self, num: int) -> int: return ((num & 0xaaaaaaaa) >> 1) | ((num & 0x55555555) << 1)