> [!META]- Inline Metadata > [tags:: #career #concepts/programming/bit-manipulation ] > [project group:: Neetcode 150] > [difficulty:: easy] > [status:: done] > [link:: https://leetcode.com/problems/reverse-bits/submissions/] > [up:: [[Leetcode MOC]]] ## Problem 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](https://en.wikipedia.org/wiki/Two%27s_complement). Therefore, in **Example 2** above, the input represents the signed integer `-3` and the output represents the signed integer `-1073741825`. **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` **Follow up:** If this function is called many times, how would you optimize it? ## Solution ### Mine #### Python ```python class Solution: def reverseBits(self, n: int) -> int: return int(f"{n:032b}"[::-1], 2) ``` #### Rust ### Neetcode ```python class Solution: def reverseBits(self, n: int) -> int: res = 0 for i in range(32): bit = (n >> i) & 1 res = res | (bit << (31 - i)) return res ``` ## Things I Learned ### Neetcode For each bit, take `(n >> i)` to get the bit we want in the ones spot. Then shift it to the left by 31 - 1 and log or it with `res`. ## Scratchpad The obvious solution would be to just get the string representation, flip it, and convert back to an int. I suspect there's a technique that's more performant and whatnot.