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种情况(下面用
P
i
P_i
Pi表示
i
i
i对括号产生的字符串):
- n-1对括号外面加一对: ( P n − 1 P_{n-1} Pn−1 )
- i i i对括号和 n − i n-i n−i对括号的组合( 1 ≤ \le ≤i ≤ \le ≤n-1): P i P_{i} Pi+ P n − i P_{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;
}
};