#include <functional> class Solution { public: /** * * @param n int整型 * @return string字符串vector */ vector<string> generateParenthesis(int n) { vector<string> res; string path; function<void(int, int)> recur = [&](int l, int r) -> void { if (l == 0 && r == 0) { res.push_back(path); return; } if (l > 0) { path += '('; recur(l - 1, r); path.pop_back(); } if (r > 0 && l < r) { path += ')'; recur(l, r - 1); path.pop_back(); } }; recur(n, n); return res; } };
思路:递归。
每一步递归都尝试能否加左右括号。左右括号都加完了则记录当前的字符串。