【算法三十五】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支持你去添加右括号,然后回溯,最后拿到答案

相关推荐
GoAI19 分钟前
DeepSeek Harness Memory (一)主流记忆插件总结
后端·算法·面试
Pniubi1 小时前
力扣54.螺旋矩阵
算法·leetcode·矩阵
choumou_M3 小时前
算法_1:由浅入深学习快速排序QuickSort
学习·算法·排序算法
Coder_Shenshen4 小时前
罗克韦尔ACD工程归档离线变量树解析
算法·c#
心仪久了会沦陷6 小时前
C语言数据结构入门——树与二叉树详解:概念、堆实现与链式遍历
c语言·数据结构·算法
小此方6 小时前
[算法实战论:动态规划]背包问题概念,01不满背包问题,01满背包问题,背包问题的滚动数组空间优化
算法·动态规划
悠仁さん7 小时前
【C++】哈希表
c++·算法·散列表
地平线开发者7 小时前
点云算法整理与常用计算模块:从数据到模型,再到工程与量化
算法·自动驾驶
武子康10 小时前
H3-World 为何在加载 LoRA 前,先检查导入的代码?
人工智能·深度学习·算法
秋天的怀念_David10 小时前
算法一千零一夜 · 第二十八夜 注册
java·程序人生·算法