notes/OJ notes/pages/Leetcode Reverse-Bits.md
2022-07-22 15:36:57 +08:00

98 lines
2.4 KiB
Markdown

# Leetcode Reverse-Bits
#### 2022-07-22 15:15
> ##### Algorithms:
> #algorithm #bit_manipulation
> ##### Data structures:
> #DS #bitset
> ##### Difficulty:
> #coding_problem #difficulty-easy
> ##### Additional tags:
> #leetcode
> ##### Revisions:
> N/A
##### Related topics:
```expander
tag:#bitset
```
##### Links:
- [Link to problem](https://leetcode.com/problems/reverse-bits/)
- [Solution and detailed explanation](https://leetcode.com/problems/reverse-bits/discuss/1232842/JAVA-C%2B%2B-%3A-0ms-or-O(1)-Time-Complexity-or-in-place-or-Detailed-Explanation)
- [Shifting solution an explanation](https://leetcode.com/problems/reverse-bits/discuss/54741/O(1)-bit-operation-C++-solution-(8ms)/301342)
___
### Problem
Reverse bits of a given 32 bits unsigned integer.
#### Examples
**Example 1:**
**Input:** n = 00000010100101000001111010011100
**Output:** 964176192 (00111001011110000010100101000000)
**Explanation:** The input binary string **00000010100101000001111010011100** represents the unsigned integer 43261596, so return 964176192 which its binary representation is **00111001011110000010100101000000**.
**Example 2:**
**Input:** n = 11111111111111111111111111111101
**Output:** 3221225471 (10111111111111111111111111111111)
**Explanation:** The input binary string **11111111111111111111111111111101** represents the unsigned integer 4294967293, so return 3221225471 which its binary representation is **10111111111111111111111111111111**.
#### Constraints
- The input must be a **binary string** of length `32`
### Thoughts
> [!summary]
> This is a #bit_manipulation problem.
There are two methods:
- swapping bits inside the bitset
- shifting
#### Method 1: Swapping
This is the most simple and intuitive one, all you have to do is swap the first and last numbers, and continue like that.
#### Method 2: Shifting
The bitset has operations like this `<<` `>>`, which can be used to shift, and reverse the array.
The operation is already documented in the link above:
[[Leetcode Reverse-Bits#Links]]
### Solution
#### Method 1:
```cpp
class Solution {
public:
uint32_t reverseBits(uint32_t n) {
// swap bits inside the function
bitset<32> nb(n);
bool tmp;
int l = 0, r = 31;
while (l < r) {
tmp = nb[l];
nb[l] = nb[r];
nb[r] = tmp;
l++;
r--;
}
return nb.to_ulong();
}
};
```
#### Shifting:
==#TODO solve it using shifting==