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")