打 表
当然不能这样
可以递归吧,应该是三种情况,第n的情况时n-1的每种情况左边加一对括号,或者右边加一对括号,或者被括号包括,但是这样有可能重复,好像不太好。
或者换个思路,当成一个二叉树,根节点是一个左括号,两侧分别是左括号和右括号。向递归函数里传入的值为(未配对左括号的数量,当前的字符串)
关于java传递对象的引用
传递基本数据类型的时候是传递值,传递对象的时候传递的是引用
class Solution {
public List generateParenthesis(int n) {
List ans = new ArrayList<>();
summon(ans, n, 1, "(", 1);
return ans;
}
public void summon(List ans, int n, int stack, String str, int leftCount){
if(str.length() == n*2){
ans.add(str);
return ;
}
if(leftCount < n){
summon(ans, n, stack+1, str+"(", leftCount+1);
}
if(stack > 0 ){
summon(ans, n, stack-1, str+")", leftCount);
}
}
}
都用了递归了,没想到时间和内存消耗都算优秀的



