题目描述:
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> res;
dfs(0,0,n,"",res);
return res;
}
void dfs(int lNum, int rNum, int pNum, string pS, vector<string>& res){
if(lNum == pNum && rNum == pNum){
res.push_back(pS);
return;
}
if(lNum < pNum) dfs(lNum + 1, rNum, pNum, pS + "(", res);
if(rNum < lNum) dfs(lNum, rNum + 1, pNum, pS + ")", res);
}
};
这个题一直搁置了很久才做,原因是没有思路。哎,还是算法掌握的不够牢啊。很简单的dfs算法。头结点是左括号,从头结点开始往下dfs搜索。如果当前左括号个数未满,则可以加左括号,如果当前右括号的个数小于左括号的个数,则可以加右括号。知道左括号加满,右括号也加满为止,得到一个有效括号串。感觉还是自己把条件想的严格了。
静心尽力!