本文旨在对于个人知识的梳理以及知识的分享,如果有不足的地方,欢迎大家在评论区指出
题目描述
整数转换。编写一个函数,确定需要改变几个位才能将整数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))
}