LeetCode 刷题【22. 括号生成】
22. 括号生成
自己做(憋不出来)
看题解
解1:暴力解(遍历所有可能)
解2:优化的暴力解
解3:递归
class Solution {shared_ptr<vector<string>> cache[100] = {nullptr};
public:shared_ptr<vector<string>> generate(int n) {if (cache[n] != nullptr)return cache[n];if (n == 0) {cache[0] = shared_ptr<vector<string>>(new vector<string>{""});} else {auto result = shared_ptr<vector<string>>(new vector<string>);for (int i = 0; i != n; ++i) {auto lefts = generate(i);auto rights = generate(n - i - 1);for (const string& left : *lefts)for (const string& right : *rights)result -> push_back("(" + left + ")" + right);}cache[n] = result;}return cache[n];}vector<string> generateParenthesis(int n) {return *generate(n);}
};
今日总结
告辞,玩不了一点,这怎么想到复杂度这么高的暴力解(脑子都自动排除了),还有都没有考虑n有上限并且输出结果数量有限的问题,之前就屡次被溢出折磨的不成人样。这么玩的话,面向结果编程——列表