【题目描述】
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).
【思路】我的思路是将n变成二进制存进一个vector中,再从vector的另一个方向将这些数逐位加起来。
【代码】
class Solution {
public:
uint32_t reverseBits(uint32_t n) {
if(n==0) return n;
vector<int> vec(32,0);
uint32_t ans=0;
int tmp=0;
int cnt=31;
while(n){
tmp=n%2;
n=n/2;
vec[cnt--]=tmp;
}
cnt=1;
for(int i=0;i<=31;i++){
ans+=vec[i]*cnt;
cnt*=2;
}
return ans;
}
};参考别人的思路写的,用的移位和逻辑运算,要简洁很多。
class Solution {
public:
uint32_t reverseBits(uint32_t n) {
uint32_t ans;
for(int i=0;i<=31;i++,n>>=1){
if(n&1){
ans|=1<<(31-i);//相当于ans+=<span style="font-family: Arial, Helvetica, sans-serif;">1<<(31-i)</span>
}
}
return ans;
}
};
862

被折叠的 条评论
为什么被折叠?



