首页 > 其他 > 详细

leetcode 面试题 05.06. 整数转换

时间:2020-10-19 11:23:02      阅读:27      评论:0      收藏:0      [点我收藏+]

整数转换。编写一个函数,确定需要改变几个位才能将整数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;
    }
};

 

leetcode 面试题 05.06. 整数转换

原文:https://www.cnblogs.com/8023spz/p/13838872.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!