Я пытался запрограммировать задачу «Создать скобки» на Leetcode, но продолжаю получать сообщение «Превышен предел памяти», что означает, что в моем коде есть бесконечный цикл. Однако я не могу понять, почему будет бесконечный цикл / рекурсия. Спасибо!
class Solution {
public List<String> generateParenthesis(int n) {
List<String> permutations = new ArrayList<String>();
permute(permutations, "" , n, n);
return permutations;
}
public void permute (List<String> permutations, String paren, int left, int right){
if (left == 0 && right == 0){
permutations.add(paren);
return;
}
if (left > 0){
permute(permutations, paren + "(", left--, right);
}
if (right > left){
permute(permutations, paren + ")", left, right--);
}
}
}





Вы вызываете с параметром left--, он вызовет метод снова с тем же значением параметра left; только после возврата из вашей функции параметр left уменьшается на единицу.
Но это тоже не решит вашу проблему, вам нужно поставить left-1, например:
permute(permutations, paren + "(", left-1, right);
и аналогично для правого:
permute(permutations, paren + ")", left, right-1);
left-- уменьшает значение, когда функция возвращает, а это не то, что вам нужно.