190. Reverse Bits
Description
Reverse bits of a given 32 bits unsigned integer.
Note:
- Note that in some languages, such as Java, there is no unsigned integer type. In this case, both input and output will be given as a signed integer type. They should not affect your implementation, as the integer's internal binary representation is the same, whether it is signed or unsigned.
- In Java, the compiler represents the signed integers using 2's complement notation.
Example 1:
Input: n = 43261596
Output: 964176192
Explanation:
Integer | Binary |
---|---|
43261596 | 00000010100101000001111010011100 |
964176192 | 00111001011110000010100101000000 |
Example 2:
Input: n = 2147483644
Output: 1073741822
Explanation:
Integer | Binary |
---|---|
2147483644 | 01111111111111111111111111111100 |
1073741822 | 00111111111111111111111111111110 |
Constraints:
0 <= n <= 231 - 2
n
is even.
Follow up: If this function is called many times, how would you optimize it?
Solutions
Solution 1: Bit Manipulation
We can extract each bit of n
from the least significant bit to the most significant bit, and then place it in the corresponding position of ans
.
For example, for the \(i\)-th bit, we can use (n & 1) << (31 - i)
to extract the \(i\)-th bit of n
and place it on the \(31 - i\)-th bit of ans
, then right shift n
by one bit.
The time complexity is \(O(\log n)\), and the space complexity is \(O(1)\).
1 2 3 4 5 6 7 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 |
|
1 2 3 4 5 6 7 8 9 10 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
|