点击:题目链接:数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
思路
我们可以把一对括号看作一个整体,两个括号之前的组合只有两种放置的方式:
因此我们可以推出这个表达式:s = "(" + l + ")"+ r
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| class Solution { public: vector<string> generateParenthesis(int n) { return *generate(n); }
shared_ptr < vector<string>> res[100] = {nullptr};
shared_ptr<vector<string>> generate(int n) { if (res[n] != nullptr) return res[n];
if (n == 0) { res[0] = shared_ptr<vector<string>>(new vector<string>{""}); } else { auto temp = shared_ptr<vector<string>>(new vector<string>); for (int i = 0; i != n; ++i) {
auto left = generate(i); auto right = generate(n - i - 1);
for (const string& l : *left) { for (const string& r : *right) { temp->push_back("(" + l + ")" + r); } } res[n] = temp; } } return res[n]; } };
|
复杂度
略。。