Pregunta : escriba una función que tome un número entero sin signo y devuelva el número de bits '1' que tiene (también conocido como el peso de Hamming).
Ejemplo 1 :
Entrada: n = 00000000000000000000000000001011
Salida: 3
Explicación: La cadena binaria de entrada 00000000000000000000000000001011 tiene un total de tres bits '1'.
Mi código
var hammingWeight = function(n) { for (i=0; i<32; i++) { var mask = 1; var count = 0; if ((mask & n) != 0 ) { mask <<= 1; count++; } return count; } };Caso de prueba :
00000000000000000000000000001011 00000000000000000000000010000000 11111111111111111111111111111101Salida esperada :
3 1 31Salida :
1 0 1¿Qué hice mal con mi código?
Tienes algunos problemas aquí:
count y la mask dentro de su bucle for .return después de la primera iteración del bucle, en lugar de esperar a que todo cuente.mask si un bit es 1 .Aquí hay una función corregida:
var hammingWeight = function(n) { var count = 0; var mask = 1; for (i=0; i<32; i++) { if ((mask & n) != 0 ) { count++; } mask <<= 1; } return count; };Una forma más corta de escribir esto podría ser:
const hammingWeight = value => [...value].filter(f => f == 1).length;Explicación:
[...value] esto creará una matriz de 0 y 1 en función de su cadena
.filter(f => f == 1) filtrará la matriz, manteniendo solo los valores 1
.length le da la longitud de la matriz filtrada