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).
Follow up: If this function is called many times, how would you optimize it?
s思路: 1. 一種方法是右移得到數位,然后左移構造新數。麻煩的地方在于是unsigned integer,貌似不影響。 2. 另一種方法是兩頭取bit位,swap。這樣就和unsigned integer無關! 3. 如果調用多次,如何優化?
//方法1:移位。class Solution {public: uint32_t reverseBits(uint32_t n) { // uint32_t res=0; for(int i=0;i<32;i++){ res<<=1; if(n){ res=res|n&1; n>>=1; } } return res; }};//方法2:swap首尾class Solution {public: uint32_t reverseBits(uint32_t n) { // int i=0,j=31; while(i<j){ int l=n&(1<<i); int r=n&(1<<j); if(l&&!r||!l&&r){ n=n^(1<<j); n=n^(1<<i); } i++;j--; } return n; }};
|
新聞熱點
疑難解答