问题
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例子
思路
-
方法1
回溯,要先有左括号,再有右括号
-
方法2
代码
//方法1
class Solution {
public List<String> generateParenthesis(int n) {
List<String> list = new ArrayList<>();
get(n,list,new StringBuilder(),0,0);
return list;
}
public void get(int n, List<String> list, StringBuilder sb, int left, int right) {
if(left==right && left==n) {
list.add(sb.toString());
return;
}else{
if(right<left && left<=n) {
sb.append(')');
get(n,list,sb,left,right+1);
sb.deleteCharAt(sb.length()-1);
}
//left<right和left==right都要进行这个
if(left<n){
sb.append('(');
get(n,list,sb,left+1,right);
sb.deleteCharAt(sb.length()-1);
}
}
}
}
//方法2