题目地址
难度:⭐
题目描述:
配对交换。编写程序,交换某个整数的奇数位和偶数位,尽量使用较少的指令(也就是说,位0与位1交换,位2与位3交换,以此类推)。
示例1:
1 2
| 输入:num = 2(或者0b10) 输出 1 (或者 0b01)
|
示例2:
提示:
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; 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; } };
|
⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳总 结⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳
总结:
没有官方题解,简单。