[LeetCode] 032: Generate Parentheses

来源:互联网 发布:免费视频监控软件 编辑:程序博客网 时间:2024/06/06 03:57
[Problem]

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:

"((()))", "(()())", "(())()", "()(())", "()()()"


[Solution]
class Solution {
public:
vector<string> generateParenthesis(int left, int right, stack<char> myStack){
vector<string> res;
if(left == 0 && right == 0){
return res;
}
// insert '(' only
if(myStack.empty()){
myStack.push('(');
vector<string> nextResult = generateParenthesis(left-1, right, myStack);
for(int i = 0; i < nextResult.size(); ++i){
res.push_back("(" + nextResult[i]);
}
}
else{
if(myStack.top() == '('){
// 1. insert '('
if(left > 0){
myStack.push('(');
vector<string> nextResult = generateParenthesis(left-1, right, myStack);
for(int i = 0; i < nextResult.size(); ++i){
res.push_back("(" + nextResult[i]);
}

// remove the '(' inserted just now
myStack.pop();
}

// 2. insert ')'
myStack.pop();
if(right == 1){
res.push_back(")");
}
else{
vector<string> nextResult = generateParenthesis(left, right-1, myStack);
for(int i = 0; i < nextResult.size(); ++i){
res.push_back(")" + nextResult[i]);
}
}
}
}
return res;
}
vector<string> generateParenthesis(int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
stack<char> myStack;
return generateParenthesis(n, n, myStack);
}
};
说明:版权所有,转载请注明出处。Coder007的博客
原创粉丝点击