leetcode-Generate Parentheses-22
输入n,输出n个括号的组合。
如果仅仅求组合有多少种,直接用卡特兰公式,但要求输出所有组合,用dfs,回溯,条件是:
设ll和rr为剩下的左括号和右括号数
1.ll>0,可输出左括号
2.ll>=rr,说明不合法,return
3.输出右括号
原因是先出现了左括号才能出现右括号
1 class Solution { 2 public: 3 void dfs(vector<string> &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<string> generateParenthesis(int n) { 13 vector<string> 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 };