Leetcode22. 括号生成(简单回溯)

Posted !0 !

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode22. 括号生成(简单回溯)相关的知识,希望对你有一定的参考价值。

题目链接:https://leetcode-cn.com/problems/generate-parentheses/

解题思路

我们每次看可以记录左括号和右括号的个数,如果左括号用完就开始把右括号加入答案中。

代码

class Solution {
    List<String> ans = new ArrayList<>();
    public List<String> generateParenthesis(int n) {
        dfs("", n, n);  
        return ans;
    }
    void dfs(String t, int l, int r) {
        if(l == 0 && r == 0) {  //括号都用完了
            ans.add(t);
            return;
        }
        if(l > r) return;   //左括号剩余数量不可能大于右括号剩余数量,不合法。
        if(l > 0)   //如果左括号没有用完
            dfs(t + "(", l - 1, r); //递归添加左括号
        if(r > 0)   //如果右括号没有用完
            dfs(t + ")", l, r - 1); //递归添加右括号
    }
}

复杂度分析

  • 时间复杂度:O( 4 n n \\frac{4^n}{\\sqrt{n}} n 4n)
  • 空间复杂度:O(n)

以上是关于Leetcode22. 括号生成(简单回溯)的主要内容,如果未能解决你的问题,请参考以下文章

22. 括号生成(深搜+回溯)

22. 括号生成(深搜+回溯)

[22]. 括号生成

LeetCode22:括号生成

LeetCode- 22. 括号生成

LeetCode 第22题 括号生成