190. Reverse Bits

来源:互联网 发布:外置光驱盒 mac 编辑:程序博客网 时间:2024/04/30 12:17

Reverse bits of a given 32 bits unsigned integer.

For example, given input 43261596 (represented in binary as 00000010100101000001111010011100), return 964176192 (represented in binary as 00111001011110000010100101000000).

思路:n&1拿到最后一位,然后n>>1右移拿到下一位,把每一位加到一个数上去,再左移动。

class Solution {public:    uint32_t reverseBits(uint32_t n) {        uint32_t reversed = 0;        for(int i = 0; i < 32; i++)        {            reversed = ((reversed << 1) | (n & 1));            n = n >> 1;        }        return reversed;    }};
 uint32_t reverseBits(uint32_t n) {        uint32_t reversed = 0;        for(int i = 0; i < 31; i++)        {            reversed |= n & 1;            n = n >> 1;            reversed <<= 1;        }        reversed |= n&1;        return reversed;

简单版思路:每4位反转一下的结果是可以算出来的,而且有限的,可以先存起来。然后进行8次就可以反转完了。

 char tb[16] = {0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15}; int curr = 0;        uint32_t ret = 0;        uint32_t msk = 0xF;        for(int i = 0; i < 8; i++) {            ret = ret << 4;            curr = msk&n;            ret |= tb[curr];            n = n >> 4;        }        return ret;
0 0
原创粉丝点击