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> v;
vector<string> generateParenthesis(int n) {
getresult("", n,n);
return v;
}
void getresult(string str, int l, int r)
{
if (l==0 && r==0){
v.push_back(str);
return ;
}
if (l>0)
getresult(str + '(', l-1, r);
if (r>l)
getresult(str + ')', l, r-1);
}
};