产生括号问题

时间:2018-11-21 00:53:39

标签: algorithm recursion backtracking parentheses

我一直试图在Leetcode上编写Generate括号的问题,但是我一直在获取“ Memory Limit Exceeds”,这意味着我的代码中存在无限循环。但是,我不明白为什么会有无限循环/递归。谢谢!

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 :(得分:1)

您正在使用参数left--进行调用,它将再次使用参数left的相同值来调用该方法;只有在函数返回后,参数left才会减少1。

但这也不能解决您的问题,您必须像这样提供left-1

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

以及类似的权利:

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

left--会在函数返回时减小该值,而不是您想要的。