22. Generate Parentheses**
https://leetcode.com/problems/generate-parentheses/
题目描述
Given n
pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
For example, given n = 3
, a solution set is:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
C++ 实现 1
DFS + Backtracing. 使用 lnum
以及 rnum
分别记录 (
以及 )
的个数.
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> res;
vector<char> parenthesis{'(', ')'};
string cur;
dfs(parenthesis, cur, res, n, 0, 0);
return res;
}
private:
void dfs(const vector<char> &parenthesis, string &cur, vector<string> &res, int n, int lnum, int rnum) {
if (cur.size() == n + n) {
res.push_back(cur);
return;
}
for (const auto &c : parenthesis) {
// lnum 应满足 <= rnum, 因为 ( 应该出现在 ) 的前面
if ((lnum == n && c == '(') || (rnum > lnum) || (lnum == 0 && c != '('))
continue;
cur += c;
if (c == '(') lnum += 1;
if (c == ')') rnum += 1;
dfs(parenthesis, cur, res, n, lnum, rnum);
if (cur.back() == '(') lnum -= 1;
if (cur.back() == ')') rnum -= 1;
cur.pop_back();
}
}
};