El Menor de Puros Unos - LeetCode #3360
1 min
El Menor de Puros Unos — LeetCode #3360
Problema: Dado un número positivo , encuentra el menor número cuya representación binaria esté formada únicamente por bits 1 (por ejemplo: 1, 3, 7, 15, …).
📝 Resumen
Este ejercicio es útil para practicar técnicas de manipulación de bits y reconocer patrones en la representación binaria de los números.
📋 Enunciado del problema
- Entrada: Un número positivo .
- Salida: El menor número tal que la representación binaria de contiene solo unos.
Restricciones:
📊 Ejemplos
| bin() | resultado | bin(resultado) | |
|---|---|---|---|
| 5 | 0101 | 7 | 111 |
| 10 | 1010 | 15 | 1111 |
| 3 | 11 | 3 | 11 |
💡 Observaciones clave
Los números con todos los bits en 1 tienen la forma (por ejemplo: 1, 3, 7, 15, 31, …). El problema se reduce a encontrar el menor tal que .
🧠 Estrategia
- Calcular :
- Obtener el resultado:
🛠️ Implementación (TypeScript / JavaScript)
export function smallestNumber(n: number): number {
// Encontrar el exponente k tal que 2^k - 1 >= n
const k = Math.ceil(Math.log2(n + 1))
// Calcular 2^k - 1
return (1 << k) - 1
}▶️ Ejecución de ejemplo
console.log(smallestNumber(5)) // 7
console.log(smallestNumber(10)) // 15
console.log(smallestNumber(3)) // 3
console.log(smallestNumber(1000)) // 1023⏱️ Análisis de complejidad
- Tiempo:
- Espacio:
⚠️ Casos límite y pruebas adicionales
- → salida: 1
- → salida: 1023 ()
🛎️ Detalles de la implementación
- Se utiliza
Math.log2para calcular el logaritmo en base 2 de . Math.ceilredondea hacia arriba al entero más cercano.- El operador de desplazamiento de bits izquierdo (
<<) calcula . - Se resta 1 para obtener el número con todos los bits establecidos.
✅ Conclusión
El enfoque aprovecha la propiedad estructural de los números compuestos sólo por unos en binario y permite calcular la solución en tiempo constante.