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:
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
想法
是一个深度优先的对于树的遍历方法,仔细观察可以发现”(“一定是被相应数量的”)”所包围的。因此我们可以画一个树,采用递归的方法便可以得到所有的结果
代码
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> result;
DFS(result, n, n, "");
return result;
}
private:
void DFS(vector<string> &result, int left, int right, string path){
// 右括号的剩余数必须大于等于左括号的剩余数
if (right < left){
return;
}//if
// 左右括号用完
if (left == 0 && right == 0){
result.push_back(path);
}//if
// 左括号还有剩余
if (left > 0){
DFS(result, left - 1, right, path + "(");
}//if
// 右括号还有剩余
if (right > 0){
DFS(result, left, right - 1, path + ")");
}//if
}
};