Rezolvam această provocare Leetcode despre Hamming Distance . Mi-ar plăcea feedback-ul despre sintaxa și stilul meu de cod Iată descrierea provocării:

Distanța Hamming între două numere întregi este numărul de poziții la care biții corespunzători sunt diferiți.

Având două numere întregi x și y, calculați distanța Hamming.

Notă: 0 ≤ x, y < 2 31 .

Exemplu:

Intrare: x = 1, y = 4

Ieșire: 2

Explicație:

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

Săgețile de mai sus indică poziții în care biții corespunzători sunt
diferiți.

Aici ” Soluția mea:

 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 

Răspuns

Aceasta este o abordare rezonabilă, dar convertirea la șiruri devreme și apoi efectuarea tuturor lucrurilor pe șiruri conduc la o mulțime de cod suplimentar. Rețineți că această construcție din codul dvs., if x!=y, în esență XORs doi biți și apoi face ceva dacă rezultatul din acest XOR este 1.

Dacă faceți acest XOR direct pe numerele întregi face ca problema să fie Mpler, întreaga problemă a nevoii de tamponare cu zero dispare (ceea ce cam înjumătățește dimensiunea codului), iar problema este redusă pentru a „număra cele în binar”. Acest lucru s-ar putea face în continuare cu o buclă similară, dar există o scurtătură:

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

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *