Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
这题如果不要输出各个结果的话那答案就是卡特兰数。
但是他要你输出了= =
可以注意到一点,就是在第n个括号放下的时候,1到n总体而言,左括号的数量大于或等于右括号。然后通过这个条件递归做就可以了。
当然实现代码的时候可以带上剩下多少个左括号多少个右括号的参数,这样比较方便。
public class Solution
{
public IList<string> GenerateParenthesis(int n)
{
string s = "";
generater(n, n, s);
List<string> ans = new List<string>();
foreach (var t in result)
{
ans.Add(t);
}
ans.Reverse();
return ans;
}
Stack<string> result = new Stack<string>();
void generater(int l, int r, string s)
{
if (l == 0 && r == 0)
{
result.Push(s);
}
if (l > 0)
{
generater(l - 1, r, s + '(');
}
if (r > 0 && l < r)
{
generater(l, r - 1, s + ')');
}
}
}