Jeg løste denne Leetcode-utfordringen om Hamming Distance . Vil gjerne ha tilbakemeldinger på syntaksen og kodestilen min. Her er utfordringsbeskrivelsen:

Hamming-avstanden mellom to heltall er antall posisjoner der de tilsvarende bitene er forskjellige.

Gitt to heltall x og y, beregne Hamming-avstanden.

Merk: 0 ≤ x, y < 2 31 .

Eksempel:

Inngang: x = 1, y = 4

Utgang: 2

Forklaring:

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

Pilene ovenfor peker på posisjoner der de tilsvarende bitene er forskjellige.

Her » er løsningen min:

 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 tilnærming, men konvertering til strenger tidlig og deretter gjør alt på strenger fører til mye ekstra kode. Vær oppmerksom på at denne konstruksjonen i koden din, if x!=y, egentlig XORs to bits og gjør deretter noe hvis resultatet av at XOR er 1.

Å gjøre det XOR direkte på heltallene gjør problemet si mpler forsvinner hele problemet med å måtte blokkere med nuller (som omtrent halverer kodestørrelsen allerede), og problemet blir redusert til å «telle de i binær». Det kan fortsatt gjøres med en lignende løkke, men det er en snarvei:

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

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *