美文网首页
22 括号生成

22 括号生成

作者: justonemoretry | 来源:发表于2020-06-07 01:03 被阅读0次

自己解法

核心思想是已生成的括号字符串里,左括号数要大于等于右括号数,然后使用递归的思想,每一步可以走不同的左右括号的选择,直到最后生成合法的括号字符串为止。深度优先遍历的思想,自己写的时候因为没想好怎么做回溯,就直接用String保存了字符串,每次开辟新的空间,这种解法的空间复杂度较高。

class Solution {

    public List<String> generateParenthesis(int n) {

        List<String> resList = new ArrayList<>(16);

        generate(0, 0, n, "", resList);

        return resList;                                     

    }

    public void generate(int left, int right, int n, String res, List<String> resList) {

        if (left > n || right > n) {

            return;

        }

        if (left == n && right == n) {

            resList.add(res);

            return;

        }

        if (left >= right) {

            generate(left + 1, right, n, res + "(", resList);

            generate(left, right + 1, n, res + ")", resList);

        }

    }

}

官方解法

与自己解法思路类似,多了一遍回溯,用StringBuilder存放字符串结果,节省空间。

class Solution {

    public List<String> generateParenthesis(int n) {

        List<String> ans = new ArrayList();

        backtrack(ans, new StringBuilder(), 0, 0, n);

        return ans;

    }

    public void backtrack(List<String> ans, StringBuilder cur, int open, int close, int max){

        if (cur.length() == max * 2) {

            ans.add(cur.toString());

            return;

        }

        if (open < max) {

            cur.append('(');

            backtrack(ans, cur, open+1, close, max);

            cur.deleteCharAt(cur.length() - 1);

        }

        if (close < open) {

            cur.append(')');

            backtrack(ans, cur, open, close+1, max);

            cur.deleteCharAt(cur.length() - 1);

        }

    }

}

相关文章

  • LeetCode-22. 括号生成

    参考:第7课-泛型递归、树的递归 LeetCode-22. 括号生成 22. 括号生成 数字 n 代表生成括号的对...

  • a 递归

    1 括号生成(leetcode 22)

  • 22 括号生成

  • 22 括号生成

    自己解法 核心思想是已生成的括号字符串里,左括号数要大于等于右括号数,然后使用递归的思想,每一步可以走不同的左右括...

  • LeetCodeDay51 —— 括号生成★★☆

    22. 括号生成 描述 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。...

  • leetcode(python)22.括号生成

    22.括号生成 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。 例如,...

  • [day7] [LeetCode] [title22,3,26]

    22.括号生成 给出n代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。 例如,给出...

  • LeetCode-22-括号生成

    LeetCode-22-括号生成 题目 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且...

  • LeetCode-22 括号生成

    题目:22. 括号生成 难度:中等 分类:字符串 解决方案:链表的遍历 今天我们学习第22题括号生成,这是一道中等...

  • 每周 ARTS 第 24 期

    1. Algorithm 22. 生成括号(中等) 描述: 给出 n 代表生成括号的对数,请你写出一个函数,使其能...

网友评论

      本文标题:22 括号生成

      本文链接:https://www.haomeiwen.com/subject/eljqtktx.html