leetcode 面试题 05.06. 整数转换

整数转换。编写一个函数,确定需要改变几个位才能将整数A转成整数B。

示例1:

输入:A = 29 (或者0b11101), B = 15(或者0b01111)
输出:2
示例2:

输入:A = 1,B = 2
输出:2
提示:

A,B范围在[-2147483648, 2147483647]之间

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/convert-integer-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

我想出的办法是把两个数转换成无符号数,就可以比较二进制位了。

代码:

class Solution {
public:
    int convertInteger(int A, int B) {
        int num = 0;
        unsigned int a = A,b = B;
        for(int i = 0;i < 32;i ++) {
            num += a % 2 != b % 2;
            a /= 2;
            b /= 2;
        }
        return num;
    }
};

别人的思路是先异或得到的数中位为1表示两数不同的位,计算有几个1即可。

代码:

class Solution {
public:
    int convertInteger(int A, int B) {
        int num = 0;
        int n = A ^ B;
        while(n) {
            num ++;
            n &= (int)(n - 1ll);//n&(n-1)表示n最低位的1变为0的数
        }
        return num;
    }
};
原文地址:https://www.cnblogs.com/8023spz/p/13838872.html