0%

配对交换

题目地址

难度:

题目描述:

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

示例1:

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

示例2:

1
2
输入:num = 3
输出:3

提示:

  1. num的范围在[0, 2^30 - 1]之间,不会发生整数溢出。
🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️解题过程🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️
解题过程:

思路:

遍历整数的二进制位数,每次取出两位(00,01,10,11)并记录其在二进制表示中的位置,只有01和10的情况会改变原整数,将原整数加上交换位置后的差值得到交换后的结果。

c++代码:(执行用时0ms,击败100.00%,内存消耗6.3M,击败6.04%)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public:
int exchangeBits(int num) {
int result=num;
int i=0;
//定义tmp存储两位二进制的值,0,1,2,3
int tmp=0;
while(num){
tmp=num%4;
if(tmp==1){
//加上交换后的差值
result+=pow(2,i+1)-pow(2,i);
}else if(tmp==2){
result+=pow(2,i)-pow(2,i+1);
}
num/=4;
i+=2;
}
return result;
}
};
⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳总 结⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳
总结:

没有官方题解,简单。

------------- THE END! THANKS! -------------