es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

incremento posterior vs +1 en función recursiva

Estaba trabajando en Leetcode nº 22, Generar Paréntesis. En una de sus soluciones, noté que si cambiamos open+1 y close+1 a ++open y ++close, el código ya no funciona. Pensé que aún podíamos usar la pre-incrementación en la recursión, así que no entiendo qué hace la diferencia aquí.

“`java
class Solution {
public List<string> generateParenthesis(int n) {
List<string> ans = new ArrayList();
backtrack(ans, new StringBuilder(), 0, 0, n);
return ans;
}
}

public void backtrack(List<string> ans, StringBuilder cur, int open, int close, int max){
if (cur.length() == max * 2) {
ans.add(cur.toString());
return;
}

<pre><code>if (open < max) {
cur.append("(");
backtrack(ans, cur, open+1, close, max);
cur.deleteCharAt(cur.length() – 1);
}
if (close < open) {
cur.append(")");
backtrack(ans, cur, open, close+1, max);
cur.deleteCharAt(cur.length() – 1);
}
</code></pre>

}
“`

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La diferencia entre usar open+1 y ++open en el método backtrack de la clase Solution para el problema #22 de Leetcode es el orden de ejecución.

    Cuando se usa open+1, se obtiene el valor de open y luego se incrementa, mientras que con ++open, se incrementa open antes de obtener su valor.

    En este caso, no hace ninguna diferencia ya que open solo se utiliza como parámetro en las llamadas recursivas al método backtrack. Sin embargo, si open se utilizara en otro lugar del código, podría dar lugar a diferentes resultados dependiendo del orden de ejecución.

    Por lo tanto, para responder a la pregunta, aún podemos usar el preincremento en la recursión, pero es importante considerar el orden de ejecución y si afecta la lógica del código.

Comments are closed.