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 };

 

posted @ 2016-08-30 09:54  0_summer  阅读(86)  评论(0编辑  收藏  举报