题目要求:
给定n对括号(),要求出所有能正确匹配的可能的括号序列。
题目链接:https://leetcode.com/problems/generate-parentheses/
思路:
因为序列只有两种符号,所以考虑用二叉树解决,每个二叉树结点代表一个符号。当还有括号剩余就继续往下生成结点,当剩余的( 的数量等于 )的数量时候,下一个生成的结点就不能是 ),否则括号不匹配。如此,就不会生成不匹配的序列。当所有的符号都生成完后,就把该序列(字符串)存进数组中。
我采用递归+DFS实现算法。
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> result;
dfsCreate(result, "", n, n);
return result;
}
void dfsCreate(vector<string> &par, string pstr, int pren, int posn) {
if(pren == 0 && posn == 0) {
par.push_back(pstr);
return;
}
if (pren > 0 ) {
dfsCreate(par, pstr + "(", pren-1, posn);
}
if (posn > 0 && pren < posn) {
dfsCreate(par, pstr + ")", pren, posn-1);
}
}
};