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:
[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]
解题步骤:
假设小于n的括号对都已生成,则n对括号有2种情况(下面用PiP_iPi表示iii对括号产生的字符串):
- n-1对括号外面加一对: ( Pn−1P_{n-1}Pn−1 )
- iii对括号和n−in-in−i对括号的组合( 1≤\le≤i≤\le≤n-1): PiP_{i}Pi+Pn−iP_{n-i}Pn−i
使用的set自动去重复。
代码:
class Solution {
public:
vector<string> generateParenthesis(int n)
{
set<string> ans[n+1];
for(int i = 1;i <= n; i++)
{
if(i == 1)
ans[i].insert("()");
else
{
for(auto it : ans[i-1])
ans[i].insert("("+it+")");
for(int j = 1;j <= i-1; j++)
for(auto it1 : ans[j])
for(auto it2 : ans[i-j])
ans[i].insert(it1+it2);
}
}
}
vector<string> ans_v;
for(auto it : ans[n])
ans_v.push_back(it);
return ans_v;
}
};