数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例:
输入:n = 3
输出:[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]
代码
class Solution {ArrayList<String> strings=new ArrayList<>();public List<String> generateParenthesis(int n) {generatePa(n,0,0,new StringBuilder());return strings;}public void generatePa(int n,int left,int right,StringBuilder stringBuilder) {if(left==n&&right==n) {//匹配完成strings.add(stringBuilder.toString());return;} if(right+1<=left)//有足够的(匹配{stringBuilder.append(')');generatePa(n,left,right+1,stringBuilder);stringBuilder.deleteCharAt(stringBuilder.length()-1);//回溯}if(left+1<=n)//有足够的(可以用{stringBuilder.append('(');generatePa(n,left+1,right,stringBuilder);stringBuilder.deleteCharAt(stringBuilder.length()-1);}}
}