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

相关推荐
jidaowansui18 分钟前
B3643 图的存储———>数组模拟邻接矩阵
算法
y1su29 分钟前
Leetcode 二分模板
java·数据结构·算法·leetcode·排序算法
youshi666836 分钟前
平衡车——PID算法优化
stm32·单片机·嵌入式硬件·算法·pid·平衡车
聪明蛋子哟1 小时前
不仅仅是向量检索:结合知识图谱与Tool Calling的混合增强生成(Hybrid RAG)方案
人工智能·算法·知识图谱
Pniubi1 小时前
力扣55跳跃游戏(贪心)
算法·leetcode·游戏
jyyyx的算法博客2 小时前
传球游戏【思维】
算法
FL16238631292 小时前
关于2026年南昌大学811信号与系统最后一题电路系统解题思路
算法
殷色玫瑰2 小时前
C++ STL:map 与 set 详解——从底层红黑树到实际应用
c语言·数据结构·c++·算法·visualstudio·rpc
行者全栈架构师2 小时前
【鸿蒙心迹】鸿蒙网络请求架构实战——@ohos.net.http 到 Axios 封装、拦截器与统一错误处理(HarmonyOS 7.x)
前端·算法·架构
小宋10212 小时前
OpenTelemetry GenAI可观测性实战:串起模型、工具、Token与错误
java·人工智能·算法·贪心算法