1. 程式人生 > >【二進位制求反序】LeetCode初試驗_Reverse Bits

【二進位制求反序】LeetCode初試驗_Reverse Bits

今天在網上看到有人說LeetCode很適合刷題,於是我就隨手點了一道題看看。

Reverse Bits

 Total Accepted: 12829 Total Submissions: 47004My Submissions

Reverse bits of a given 32 bits unsigned integer.

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

).

Follow up:
If this function is called many times, how would you optimize it?


這是一道很普通的二進位制求反序二進位制的問題,腦中想到的自然還是和十進位制一樣取餘放到新的數裡去,然後乘以十迴圈到底。

然後在Discuss看到一個3ms的演算法,對哦~畢竟是二進位制,那麼因材制宜採用二進位制的各種運算自然會快得多!

二進位制有哪些在底層來說是基礎運算呢? 邏輯運算,左右移。

又因為uint32_t是一個32位的數,所以不管這數原先是多少都呆膠布~

res=(res<<1)^(n&1)  容器左移一格然後把移出來的末位放上原數n的末尾

n>>=1 然後原數的末尾就不需要咯,右移扔掉~

Code:

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