461. Hamming Distance
即求两个正整数的二进制对应位数不一样的个数算法
从问题描述来看,最直观的解决方法就是十进制数先转成二进制,再比对相同位数是否相同,不一样则计数器累加,最终计数器的值便是Hamming Distance
。优化
优化方案:先
^
运算,对运算结果的位数进行遍历,1
则计数器累计ui
基于这个思想,须要用到的有 异或运算
和 位运算
。code
异或运算法则:相同为零,不一样为一。
异或非运算法则:相同为一,不一样为零。
即:ip
输入A: 1 0 1 0 输入B: 1 1 0 0 异或运算结果: 0 1 1 0 异或非(同或)运算结果:1 0 0 1
左移leetcode
右移get
func hammingDistance(x int, y int) int { counter := 0 tmp := x ^ y t := 1 for i := uint(0); i < 32 && t > 0; i++ { t = tmp >> i counter += (tmp >> i) & 1 } return counter }