我一直试图在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--);
}
}
}
答案 0 :(得分:1)
您正在使用参数left--
进行调用,它将再次使用参数left
的相同值来调用该方法;只有在函数返回后,参数left
才会减少1。
但这也不能解决您的问题,您必须像这样提供left-1
:
permute(permutations, paren + "(", left-1, right);
以及类似的权利:
permute(permutations, paren + ")", left, right-1);
left--
会在函数返回时减小该值,而不是您想要的。