#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;
    }
};

思路:递归。

每一步递归都尝试能否加左右括号。左右括号都加完了则记录当前的字符串。