https://leetcode.com/problems/reverse-bits/
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).
簡單的做法就是遍歷一遍,但是這個方法很低效,貌似也沒有什麼更好的辦法了class Solution {
public:
uint32_t reverseBits(uint32_t n) {
if(0 == n)
{
return 0;
}
int res = 0;
for(int i = 0; i < 32; i++)
{
if( n & 1)
{
res += (1 << (31-i));
}
n = n >> 1;
}
return res;
}
};
Number of 1 Bits
https://leetcode.com/problems/number-of-1-bits/
Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also known as the Hamming weight).
For example, the 32-bit integer ’11' has binary representation 00000000000000000000000000001011
,
so the function should return 3.
class Solution {
public:
int hammingWeight(uint32_t n) {
if(0 == n)
{
return 0;
}
int res = 0;
while(n)
{
n = n&(n-1);
res++;
}
return res;
}
};
Reverse Integer
https://leetcode.com/problems/reverse-integer/
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321 這裏計算過程並不複雜,但是注意是否會超過範圍
class Solution {
public:
int reverse(int x) {
long long xx = x; //防止負數超過範文
if(0 == x)
{
return 0;
}
int flag = 0;
if(x < 0)
{
flag = 1;
xx = -x;
}
stack<int> temp;
while(xx)
{
temp.push(xx%10);
xx = xx/10;
}
long long index = 1;
long long res = 0;
while(!temp.empty())
{
res += temp.top()*index;
index = index*10;
temp.pop();
}
if(flag)
{
res = res*(-1);
if(res < INT_MIN)
return 0;
}
if(res > INT_MAX)
{
return 0;
}
return res;
}
};