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:
"((()))", "(()())", "(())()", "()(())", "()()()"
Have you met this question in a real interview?
Yes
No
class Solution {
vector<string> ret;
bool isValid(string s){
stack<char> st;
for(int i = 0 ;i < s.length(); i++){
if(s[i] == '(')
st.push(s[i]);
else if( (!st.empty()) && st.top()=='(') //!注意 判断st是否为空
st.pop();
else
return false;
}
if(st.empty())
return true;
}
void combination(int lLeft, int rLeft, string s){
if(lLeft==0 && rLeft==0)
if(isValid(s)){
ret.push_back(s);
return;
}else
return;
string s1 = s, s2 = s;
if(lLeft>0){
s1+='(';
combination(lLeft-1, rLeft, s1);
}
if(rLeft>0){
s2+=')';
combination(lLeft, rLeft-1, s2);
}
}
public:
vector<string> generateParenthesis(int n) {
combination(n, n, "");
return ret;
}
};