leetcode 漢明距離 python3

2021-10-08 09:35:37 字數 1584 閱讀 6524

方案一:

異或的性質上相同的為0,不同的為1

class

solution

:def

hammingdistance

(self, x:

int, y:

int)

->

int:

return

bin(x^y)

.count(

'1')

方案二:

使用位操作,分別逐次取出兩個數字的二進位制位出來進行比較,比較不同即可

class

solution

(object):

defhammingdistance

(self, x, y)

:"""

:type x: int

:type y: int

:rtype: int

"""ans =

0while

true

:if x==

0and y==0:

break

num1 = x&

1 num2 = y&

1if num1 != num2:

ans +=

1 x >>=1

y >>=1

return ans

ps:

&:按位與操作,只有 1 &1 為1,其他情況為0。可用於進製運算

python中有兩種方法判斷乙個數是不是偶數或者奇數:

in [29]

:3&1

out[29]

:1in [30]

:3%2

out[30]

:1in [31]

:4&1

out[31]

:0in [32]

:4%2

out[32]

:0

效能肯定是&1更高

^:異或,相同為0,相異為1。可用於加操作(不包括進製項)

將整數通過移位並與1進行與操作,即可判斷當時末尾是否為1.但是由於整數以二進位制補碼的方式儲存,正數右移與負數右移得到的效果並不相同,負數在右移過程中會自動補 1 .由於在c 或c++這種語言中資料的型別要先宣告,如 int為32位,而在python中,由於動態語言的特性,資料的位數理想上是不受限制的,因此可通過 移位的次數進行判斷,int型資料移位不能超過32即可,這樣程式的迴圈次數恆定為32.我認為的是當n&1的時候,得到的是二進位制末尾的數字,所以需要右移
class

solution

:def

numberof1

(self, n)

:# write code here

m =0 result =

0while m <32:

if n &1:

result +=

1 n = n >>

1 m +=

1return result

leetcode 漢明距離

漢明距離 兩個整數之間的漢明距離指的是這兩個數字對應二進位制位不同的位置的數目。給出兩個整數 x 和 y,計算它們之間的漢明距離。注意 0 x,y 231.示例 輸入 x 1,y 4 輸出 2 解釋 1 0 0 0 1 4 0 1 0 0 上面的箭頭指出了對應二進位制位不同的位置。如果存在於其中乙個...

LeetCode漢明距離Swift

兩個整數之間的漢明距離指的是這兩個數字對應二進位制位不同的位置的數目。給出兩個整數 x 和 y,計算它們之間的漢明距離。注意 0 x,y 231.示例 輸入 x 1,y 4 輸出 2解釋 1 000 1 4 010 0 上面的箭頭指出了對應二進位制位不同的位置。思路一class solution n...

LeetCode 461 漢明距離

兩個整數之間的漢明距離指的是這兩個數字對應二進位制位不同的位置的數目。給出兩個整數x和y,計算它們之間的漢明距離。注意 0 x,y 231.我一直都覺得我自己寫python一股c味兒 import math class solution def hammingdistance self,x,y n ...