面试题 05.06. 整数转换
题目描述
整数转换。编写一个函数,确定需要改变几个位才能将整数A转成整数B。
示例1:
输入:A = 29 (或者0b11101), B = 15(或者0b01111) 输出:2
示例2:
输入:A = 1,B = 2 输出:2
提示:
- A,B范围在[-2147483648, 2147483647]之间
解法
方法一:位运算
我们将 A 和 B 进行异或运算,得到的结果的二进制表示中 \(1\) 的个数即为需要改变的位数。
时间复杂度 \(O(\log n)\),其中 \(n\) 为 A 和 B 的最大值。空间复杂度 \(O(1)\)。
1 2 3 4 5 |
|
1 2 3 4 5 |
|
1 2 3 4 5 6 7 |
|
1 2 3 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 |
|
1 2 3 4 5 |
|