数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

    示例:

    输入:n = 3
    输出:[
    “((()))”,
    “(()())”,
    “(())()”,
    “()(())”,
    “()()()”
    ]

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/generate-parentheses

    思路:

    • 用open表示左括号数,close表示右括号数
    • 当open < n 时,还可继续添加左括号
    • 当close < open时,左侧必有一个或多个左括号还未匹配,此时可以添加右括号,
    • 递归结束后将括号移除,即回溯

    复杂度分析:(抄自官方题解)
    image.png

    1. var generateParenthesis = function (n) {
    2. let res = [];
    3. let ans = [];
    4. function find(open, close, max) {
    5. if (res.length === max * 2) {
    6. ans.push(res.join(""));
    7. return;
    8. }
    9. if (open < max) {
    10. res.push("(");
    11. find(open + 1, close, max);
    12. res.pop();
    13. }
    14. if (close < open) {
    15. res.push(")");
    16. find(open, close + 1, max);
    17. res.pop();
    18. }
    19. }
    20. find(0, 0, n);
    21. return ans;
    22. };