还是用最基本的递归去求解。 参数维护当前未匹配的左括号和总计的左括号数,在递归的过程中根据这两个参数判断能否继续或者能否插入右括号。
public class Solution {
List<String> res = new ArrayList<String>();
public List<String> generateParenthesis(int n) {
res.clear();
fun(0,n*2,0,0,"");
return res;
}
void fun(int dep,int MaxDep,int leftNow,int leftAll,String tmp)
{
if( leftAll*2>MaxDep )
{
return ;
}
if( dep==MaxDep)
{
res.add(tmp);
return ;
}
fun(dep+1,MaxDep,leftNow+1,leftAll+1,tmp+'(');
if( leftNow>0 )
{
fun(dep+1,MaxDep,leftNow-1,leftAll,tmp+')');
}
}
}