Проблема с созданием круглых скобок - PullRequest
0 голосов
/ 21 ноября 2018

Я пытался запрограммировать задачу «Сгенерировать скобки» в 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--);
        }

    }
}

1 Ответ

0 голосов
/ 21 ноября 2018

Вы вызываете с параметром left--, он снова вызовет метод с тем же значением для параметра left;только после возврата вашей функции параметр left уменьшается на единицу.

Но это также не решит вашу проблему, вы должны указать left-1, например:

permute(permutations, paren + "(", left-1, right);

и аналогично для правого:

permute(permutations, paren + ")", left, right-1);

left-- уменьшает значение, когда функция возвращается, что не то, что вы хотите.

...