您的位置:首页 > 其它

Leetcode 190. Reverse Bits

2017-02-08 12:50 323 查看
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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  移位 swap