1 题目描述
Given
n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
难度:Medium
2 题目样例
For example, given n = 3, a solution set is:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
3 题意分析
给出一个数字n,要求返回含有n对括号的,所有合法的括号序列。
(这里的合法,大家看看样例就知道是什么意思了……理解就好。)
4 思路分析
嘻嘻,我觉得这个题目比上一个简单欸!!
我们可以利用深度优先搜索的思想,用递归的方法来解决这个问题。
每次左括号多于右括号时,可以加左括号或者右括号。
如果左括号等于右括号,就只能加左括号。
左括号达到数量上限,只能加右括号。右括号同理。
代码实现如下:
class Solution
{
public:
void generate(int left, int right, string str, vector<string>& res)
{
if(left == 0 && right == 0)
{
res.push_back(str);
return;
}
if(left > 0)
{
generate(left - 1, right, str + '(', res);
}
if(right > left)
{
generate(left, right - 1, str + ')', res);
}
}
vector<string> generateParenthesis(int n)
{
vector<string> res;
generate(n, n, "", res);
return res;
}
};
这道题目所有的提交代码的用时都相当短。我上边的这段代码用时3ms,但却落在了后10%的区间里。我看了看其他区间的代码,基本上也和上边的一个样。至于为什么时间用的比较短嘛…玄学,玄学。
5 后记
外边的烟花声吵得我难以继续写下去了…
我永远爱摸鱼.jpg