输入n,输出n个括号的组合。
如果仅仅求组合有多少种,直接用卡特兰公式,但要求输出所有组合,用dfs,回溯,条件是:
设ll和rr为剩下的左括号和右括号数
1.ll>0,可输出左括号
2.ll>=rr,说明不合法,return
3.输出右括号
原因是先出现了左括号才能出现右括号
1 class Solution { 2 public: 3 void dfs(vector&s,string st,int ll,int rr){ 4 if(ll==rr&&rr==0){ 5 s.push_back(st); 6 return; 7 } 8 if(ll>0) dfs(s,st+'(',ll-1,rr); 9 if(ll>=rr) return;10 if(rr>0) dfs(s,st+')',ll,rr-1);11 }12 vector generateParenthesis(int n) {13 vector s;14 if(n==0) return s;15 int ll=n,rr=n;16 string st;17 st+='(';18 dfs(s,st,ll-1,rr);19 return s;20 }21 };