面试题 05.06. 整数转换

本文旨在对于个人知识的梳理以及知识的分享,如果有不足的地方,欢迎大家在评论区指出


题目描述

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

示例1:

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

示例2:

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

提示:

  • A,B范围在[-2147483648, 2147483647]之间
题目链接
题目分析

看到要找到两个数字不同的位,首先想到的自然是异或运算,那么统计一个数字中1的个数其实是一个很经典的问题-汉明距离,按照这样的思路就可以得到结果了,需要注意的是,go中的int是8字节,所以需要转化为int32,防止计算的时候多计算

解题代码

Go

func hanmi(x int32) int {
    res := 0
    for x != 0 {
        res += 1
        x -= x & -x
    }
    return res
}

func convertInteger(A int, B int) int {
    return hanmi(int32(A)^int32(B))    
}

你可能感兴趣的:(程序员面试金典,算法,汉明距离)