【算法三十五】22. 括号生成

22. 括号生成

回溯:

java 复制代码
class Solution {
    public List<String> generateParenthesis(int n) {
        List<String> ans = new ArrayList<>();
        backtrack(ans,new StringBuffer(),0,0,n);
        return ans;
    }

    private void backtrack(List<String> ans,StringBuffer combine,int open,int close,int max){
        if(combine.length() == max*2){
            ans.add(combine.toString());
            return;
        }

        if(open < max){
            combine.append('(');
            backtrack(ans,combine,open+1,close,max);
            combine.deleteCharAt(combine.length()-1);
        }

        if(close < open){
            combine.append(')');
            backtrack(ans,combine,open,close+1,max);
            combine.deleteCharAt(combine.length()-1);
        }
    }
}

时间复杂度:

空间复杂度:O(N)

思路:其实回溯的题目思路就是一样,找终止条件,做什么,返回什么,删除;关键是每一层需要做什么,这一题两个if就很巧妙,利用open左括号和n进行比较,添加左括号然后回溯,同时第二个if支持你去添加右括号,然后回溯,最后拿到答案

相关推荐
wuweijianlove21 分钟前
算法的平均复杂度建模与性能回归分析的技术7
算法·数据挖掘·回归
子琦啊25 分钟前
【算法复习】字符串 | 两个底层直觉,吃透高频题
linux·运维·算法
code_pgf2 小时前
Octo 算法详解-开源通用机器人策略模型技术报告
算法·机器人·开源
嘻嘻哈哈樱桃2 小时前
牛客经典101题题解集--动态规划
java·数据结构·python·算法·职场和发展·动态规划
脱氧核糖核酸__2 小时前
LeetCode热题100——234.回文链表(两种解法)
c++·算法·leetcode·链表
IronMurphy2 小时前
【算法四十二】118. 杨辉三角 198. 打家劫舍
算法
电科一班林耿超2 小时前
第 16 课:动态规划专题(二)—— 子序列与子数组问题:面试最高频的 DP 题型
数据结构·算法·动态规划
生信研究猿3 小时前
leetcode 416. 分割等和子集
算法·leetcode·职场和发展
狗哥哥3 小时前
面包屑自动推导的算法设计:从“最短路径匹配”到工程可落地
算法·架构