Je résolvais ce défi Leetcode sur la distance de Hamming . Jadorerais avoir des commentaires sur ma syntaxe et mon style de code. Voici la description du défi:

La distance de Hamming entre deux entiers est le nombre de positions auxquelles les bits correspondants sont différents.

Étant donné deux nombres entiers x et y, calculez la distance de Hamming.

Remarque: 0 ≤ x, y < 2 31 .

Exemple:

Entrée: x = 1, y = 4

Sortie: 2

Explication:

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

Les flèches ci-dessus pointent vers des positions où les bits correspondants sont
différents.

Ici  » s ma solution:

 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

Cest « une approche raisonnable, mais convertir tôt en chaînes et tout faire sur des chaînes conduit à beaucoup de code supplémentaire. Notez que cette construction dans votre code, if x!=y, met essentiellement en XOR deux bits et fait quelque chose si le résultat de ce XOR est 1.

Faire ce XOR directement sur les entiers rend le problème si mpler, tout le problème davoir à remplir avec des zéros disparaît (ce qui réduit déjà de moitié la taille du code), et le problème est réduit à « compter ceux en binaire ». Cela pourrait encore être fait avec une boucle similaire, mais il existe un raccourci:

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

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *