Megoldottam ezt a Leetcode kihívást a Hamming távolságról . Szeretne visszajelzést adni a szintaxisomról és a kódstílusomról. Itt van a kihívás leírása:

Két egész szám közötti Hamming-távolság az a pozíciók száma, ahol a megfelelő bitek eltérnek.

Két egész x és y egész szám esetén számítsa ki a Hamming távolságot.

Megjegyzés: 0 ≤ x, y < 2 31 .

Példa:

Bemenet: x = 1, y = 4

Kimenet: 2

Magyarázat:

1 (0 0 0 1) 4 (0 1 0 0) ↑ ↑ 

A fenti nyilak olyan pozíciókra mutatnak, ahol a megfelelő bitek
különböznek.

Itt ” a megoldásom:

 def hammingDistance(x: "int", y: "int") -> "int": bin_x = bin(x)[2:] bin_y = bin(y)[2:] len_x = len(bin_x) len_y = len(bin_y) if len_x != len_y: if len_x > len_y: zeros = "0" * (len_x - len_y) bin_y = zeros + bin_y else: zeros = "0" * (len_y - len_x) bin_x = zeros + bin_x dist = 0 for x,y in zip(bin_x, bin_y): if x!=y: dist += 1 return dist 

Válasz

Ez ésszerű megközelítés, de korai karakterláncra konvertálás, majd a karakterláncokon végzett minden elvégzése sok extra kódhoz vezet. Vegye figyelembe, hogy ez a kódban található konstrukció, if x!=y, lényegében XOR-ot készít két bitből, majd tesz valamit, ha az eredmény ennek az XOR értéke 1.

Ha ezt az XOR-t közvetlenül az egész számokra hajtjuk végre, akkor a probléma si lesz mpler, eltűnik az egész probléma, hogy nullával kell padolni (ami körülbelül felére csökkenti a kód méretét), és a probléma “binárisba számolandó” -ra csökken. Ezt továbbra is meg lehet csinálni hasonló hurokkal, de van egy rövidítés:

return bin(x ^ y).count("1") 

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük