题目
https://leetcode-cn.com/problems/generate-parentheses/
方法一:回溯法
分析
如果左括号数量不大于n,我们可以放一个左括号。如果右括号数量小于左括号的数量,我们可以放一个右括号。
代码
class Solution {
List<String> res;
public List<String> generateParenthesis(int n) {
res=new ArrayList<String>();
dfs(new StringBuilder(),0,0,n);
return res;
}
//目前字符串,左括号数,右括号数,要生成的扩号对数
public void dfs(StringBuilder cur,int open,int close,int n){
if(cur.length()==n*2){
res.add(cur.toString());
return;
}
if(open<n){
cur.append('(');
dfs(cur,open+1,close,n);
//回溯,删除这次加的,即字符串末尾的数
cur.deleteCharAt(cur.length()-1);
}
if(close<open){
cur.append(')');
dfs(cur,open,close+1,n);
cur.deleteCharAt(cur.length()-1);
}
}
}