LeetCode 190. Reverse Bits 顛倒二進位制位
阿新 • • 發佈:2019-01-08
題目:
顛倒給定的 32 位無符號整數的二進位制位。
示例:
輸入: 43261596 輸出: 964176192 解釋: 43261596 的二進位制表示形式為 00000010100101000001111010011100 , 返回 964176192,其二進位制表示形式為 00111001011110000010100101000000 。
進階:
如果多次呼叫這個函式,你將如何優化你的演算法?
解題思路:
從末尾開始每一次都提取最後的一位,然後乘以基數2。
也可以通過對整體進行塊變換,達到翻轉的目的。
程式碼實現:
基本版:
public class Solution { // you need treat n as an unsigned value public int reverseBits(int n) { int res = 0; for (int i = 0; i < 32; i ++) { res <<= 1; res += n & 1; n >>= 1; } return res; } }
塊變換:
public class Solution { // you need treat n as an unsigned value public int reverseBits(int n) { n = (n << 16) | (n >>> 16); n = ((n & 0x00ff00ff) << 8) |((n & 0xff00ff00) >>> 8); n = ((n & 0x0f0f0f0f) << 4) | ((n & 0xf0f0f0f0) >>> 4); n = ((n & 0x33333333) << 2) | ((n & 0xcccccccc) >>> 2); n = ((n & 0x55555555) << 1) | ((n & 0xaaaaaaaa) >>> 1); return n; } }