首页 > 试题广场 >

奇偶位交换

[编程题]奇偶位交换
  • 热度指数:8075 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

给定一个int x,交换其二进制的奇数位和偶数位,并返回交换后的数int。

测试样例:
10
返回:5

python 两行解法。

先把它转为二进制,再交换即可。


class Exchange:
    def exchangeOddEven(self, x):
        string = bin(x).replace("0b", "").rjust(32, "0")
        return int("".join(map(lambda c: string[c + 1] + string[c], range(0, 32, 2))), 2)

还可以使用移位操作来解。没仔细研究过

编辑于 2017-10-31 16:15:08 回复(2)
思路:
提取奇数位并右移一位,提取偶数位并左移一位。两结果相或
# -*- coding:utf-8 -*-
class Exchange:
    def exchangeOddEven(self, x):
        return ((x & 0xaaaaaaaa) >> 1) | ((x & 0x555555555) << 1)

发表于 2016-08-03 21:42:32 回复(0)