###### LeetCode第21题之Generate Parentheses（两种解法）

C++代码：

#include <vector>
#include <iostream>
#include <string>
using namespace std;

class Solution {
private:
vector<string> res;
public:
//leftRemain保存还可以放左括号的数目，rightRemain保存还可以放右括号的数目
void dfs(string state, int leftRemain, int rightRemain)
{
//这种情况括号不匹配
if (leftRemain > rightRemain)
{
return;
}
if (0 == leftRemain && 0 == rightRemain)
{
res.push_back(state);
return;
}
if (leftRemain > 0)
{
dfs(state + "(", leftRemain -1, rightRemain);
}
if (rightRemain >0 )
{
dfs(state + ")", leftRemain, rightRemain-1);
}
}
vector<string> generateParenthesis(int n) {
dfs("",n,n);
return res;
}
};

int main()
{
Solution s;
vector<string> r = s.generateParenthesis(3);
for (vector<string>::iterator it = r.begin();it != r.end();++it)
{
cout<<*it<<endl;
}
return 0;
}

#include <vector>
#include <iostream>
#include <string>
using namespace std;

class Solution {
private:
//保存结果
vector<string> res;
public:
void fun(int deep, int n, int leftNum, int leftTotalNum, string s)
{
//如果左括号的总数大于n,则该字符串不可能满足要求
if (leftTotalNum  > n)
{
return;
}
//如果到达最底层,则s一定满足题意。因为运行到这里时，leftTotalNum<=n,而leftNum>=0
if (n*2 == deep)
{
res.push_back(s);
return;
}
for (int i=0;i<2;++i)
{
if (0 == i)
{
//在deep+1的位置放左括号
fun(deep+1, n, leftNum+1, leftTotalNum+1, s + "(");
}
else
{
//如果有剩余未匹配的左括号数，才能放右括号
if (leftNum > 0)
{
fun(deep+1, n, leftNum-1, leftTotalNum, s + ")");
}
}
}
}
vector<string> generateParenthesis(int n) {
//剩余未匹配的左括号数
int leftNum = 0;
//字符串中左括号总数
int leftTotalNum =0;
string s = "";
fun(0, n, leftNum, leftTotalNum, s);
return res;
}
};

int main()
{
Solution s;
vector<string> r = s.generateParenthesis(3);
for (vector<string>::iterator it = r.begin();it != r.end();++it)
{
cout<<*it<<endl;
}
return 0;
}

#### LeetCode 22：Generate Parentheses的递归，回溯两种解法

2015-08-24 11:29:56

#### leetCode 22.Generate Parentheses (生成括号) 解题思路和方法

2015-07-06 22:11:08

#### LeetCode 22 — Generate Parentheses（C++ Java Python）

2014-04-17 11:11:41

#### 【LeetCode】Generate Parentheses 解题报告

2014-10-16 15:26:03

#### leetcode-java-22. Generate Parentheses

2016-06-09 21:28:09

#### leetcode21题 题解 翻译 C语言版 Python版

2016-04-14 19:49:44

#### leetcode之 Generate Parentheses

2013-10-26 23:19:18

#### [leetcode]Generate Parentheses 生成圆括号 python实现

2016-06-12 09:36:27

#### LeetCode 22 Generate Parentheses (C,C++,Java,Python)

2015-05-10 21:11:15

#### LeetCode 22 Generate Parentheses（生成括号）

2015-11-10 22:41:54

## 不良信息举报

LeetCode第21题之Generate Parentheses（两种解法）