Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

150
Visualizações
JS error bucle infinito en leetcode pregunta fácil

Tengo este error en una pregunta de LeetCode . La publicación en la sección de discusión está aquí . lo estoy haciendo en JS pero me da error al ejecutar con algunas preguntas

Descripción:

Dado un número de columna entero, devuelva su título de columna correspondiente tal como aparece en una hoja de Excel.

Por ejemplo:

 A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 ...

Mi solución:

 /** * @param {number} columnNumber * @return {string} */ var convertToTitle = function(columnNumber) { const alphabet = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]; var name = ""; while (columnNumber > 0) { name = name.concat(alphabet[columnNumber%26 - 1]); columnNumber = columnNumber - columnNumber%26; } return(name); };

Cuando llamo a la función con colNumber < 26, funciona de maravilla, pero ¿por qué el código falla cuando lo ejecuto con un número mayor? Creo que es un bucle infinito, pero no estoy seguro.

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Puedes intentar depurar en el papel, te ayudará mucho.

Imagina que tienes una entrada = 27

como primer bucle será

 while (columnNumber > 0) { name = name.concat(alphabet[columnNumber %26 - 1]); # columnNumber = 27- 27%26; # columnNumber = 27 - 1 , new columnNumber will be 26 }

parece que funciona perfectamente, pero ¿qué sucede cuando ejecuta el segundo bucle con el nuevo valor columnNumber = 26?

 while (columnNumber > 0) { name = name.concat(alphabet[columnNumber %26 - 1]); # columnNumber = columnNumber - columnNumber %26; # columnNumber = 26 - 26%26 , 26 mod 26 = 0 # then you will get you inf loop 26 - 0 }
about 4 years ago · Juan Pablo Isaza Relatório

0

¡Buen ejercicio! Código rápido y sucio:

 function convertToTitle(columnNumber) { columnNumber -= 1; let name = ""; let alphabet = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]; while (columnNumber >= 0) { if (columnNumber > alphabet.length - 1) { name = name.concat(alphabet[Math.floor(columnNumber / 25) - 1]); columnNumber -= Math.floor(columnNumber / 25) * 25; columnNumber -= 1; } else { name = name.concat(alphabet[columnNumber]); break; } } return name; }

Editar:
Salida de consola

Explicación:
1 -> A, pero un Array comienza en el índice 0, entonces columnNumber -= 1
27 -> AB, saca la base (A) dividiendo por 25 ( alphabet.length - 1 ) y el resto de la división
Si columnNumber es <26 (ya sabes, el índice comienza en 0) podemos obtener el carácter directamente.

Una forma un poco más limpia sería el uso de String.charAt(index)

 const alphabet = "ABCDEFGHJKLMNOPQRSTUVWXYZ"; alphabet.charAt(0); // returns char at 0 -> A
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda