Eu estava resolvendo este desafio Leetcode sobre Distância de Hamming . Adoraria feedback sobre minha sintaxe e estilo de código. Esta é a descrição do desafio:

A distância de Hamming entre dois inteiros é o número de posições nas quais os bits correspondentes são diferentes.

Dados dois inteiros xey, calcule a distância de Hamming.

Nota: 0 ≤ x, y < 2 31 .

Exemplo:

Entrada: x = 1, y = 4

Saída: 2

Explicação:

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

As setas acima apontam para posições onde os bits correspondentes são
diferentes.

Aqui ” é minha solução:

 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 

Resposta

Essa é uma abordagem razoável, mas converter em strings antecipadamente e, em seguida, fazer tudo com strings leva a muito código extra. Observe que esta construção em seu código, if x!=y, essencialmente XORs dois bits e então faz algo se o resultado desse XOR é 1.

Fazer aquele XOR diretamente nos inteiros torna o problema si mpler, todo o problema de ter que preencher com zeros desaparece (o que já reduz pela metade o tamanho do código), e o problema é reduzido para “contar os uns em binário”. Isso ainda poderia ser feito com um loop semelhante, mas há um atalho:

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

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *