Stavo risolvendo questa sfida Leetcode sulla distanza di Hamming . Mi piacerebbe un feedback sulla mia sintassi e stile di codice. Ecco la descrizione della sfida:

La distanza di Hamming tra due numeri interi è il numero di posizioni in cui i bit corrispondenti sono diversi.

Dati due numeri interi x e y, calcola la distanza di Hamming.

Nota: 0 ≤ x, y < 2 31 .

Esempio:

Input: x = 1, y = 4

Output: 2

Spiegazione:

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

Le frecce sopra indicano le posizioni in cui i bit corrispondenti sono
diversi.

Qui ” è la mia soluzione:

 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 

Answer

Questo “è un approccio ragionevole, ma convertire in stringhe in anticipo e poi fare tutto su stringhe porta a molto codice extra. Nota che questo costrutto nel tuo codice, if x!=y, essenzialmente XORs due bit e poi fa qualcosa se il risultato di quello XOR è 1.

Fare quello XOR direttamente sugli interi rende il problema si mpler, scompare lintero problema di dover riempire con zeri (che già dimezza circa la dimensione del codice), e il problema si riduce a “contare quelli in binario”. Ciò potrebbe ancora essere fatto con un ciclo simile, ma esiste una scorciatoia:

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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *