Jeg løste denne Leetcode-udfordring om Hamming Distance . Vil meget gerne have feedback på min syntaks og kodestil. Her er udfordringsbeskrivelsen:
Hamming-afstanden mellem to heltal er antallet af positioner, hvor de tilsvarende bits er forskellige.
Givet to heltal x og y, beregn Hamming-afstanden.
Bemærk: 0 ≤ x, y < 2 31 .
Eksempel:
Input: x = 1, y = 4
Output: 2
Forklaring:
1 (0 0 0 1) 4 (0 1 0 0) ↑ ↑
Ovenstående pile peger på positioner, hvor de tilsvarende bits er forskellige fra hinanden.
Her ” s min løsning:
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
Svar
Det er en rimelig tilgang, men konvertering til strenge tidligt og derefter gør alt på strenge fører til en masse ekstra kode. Bemærk at denne konstruktion i din kode, if x!=y
, i det væsentlige XORs to bits og gør derefter noget, hvis resultatet af det XOR er 1.
At gøre det XOR direkte på heltalene gør problemet si mpler, hele problemet med at skulle pude med nuller forsvinder (hvilket næsten halverer allerede kodestørrelsen), og problemet reduceres til “tæl dem i binær”. Det kunne stadig gøres med en lignende sløjfe, men der er en genvej:
return bin(x ^ y).count("1")