逆转一个整数的二进制表示
逆转一个整数的二进制表示
(原创文章,转载请注明出处!)
直观的思路:取整数的最后一个bit,存入tmp整数的第一个bit位置;然后去倒数第二个bit,存入tmp整数的第二个bit位置,依次类推,直到所有的bit都被处理。时间复杂度:O(n), 辅助空间:O(n),n为整数所包含bit数目。
另一种思路:先交换相邻两个bit的位置;然后以两个bit为单位,交换相邻两个单位的位置;然后以4个bit为单位,交换相邻连个单位的位置;
然后以8个bit为单位,交换相邻两个单位的位置;然后以16个bit为单位,交换相邻两个单位的位置。
例子: 1101 0101 1000 0101 0110 1011 1001 1011
step1 : 1110 1010 0100 1010 1001 0111 0110 0111 /* 相邻bit */
step2 : 1011 1010 0001 1010 0110 1101 1001 1101 /* 相邻两bit */
step3: 1010 1011 1010 0001 1101 0110 1101 1001 /* 相邻四bit */
step4: 1010 0001 1010 1011 1101 1001 1101 0110 /* 相邻八bit */
step5: 1101 1001 1101 0110 1010 0001 1010 1011 /* 相邻十六bit */
还是可以看作是一个分治思想。从step5往step1转换,更容易理解为分治思想。
浙公网安备 33010602011771号