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 }