zoukankan      html  css  js  c++  java
  • 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;
        }
    };
  • 相关阅读:
    angular.isDefined()
    angular.isDate()
    angular.isArray()
    .NET中栈和堆的比较
    SQL Server 2012配置Always On可用性组
    一分钟了解负载均衡的一切
    C# 线程并发锁
    获取Http请求参数
    什么是WCF
    Bitmap算法应用
  • 原文地址:https://www.cnblogs.com/8023spz/p/13838872.html
Copyright © 2011-2022 走看看