Leetcode hot100 【中等】括号生成

题目转变成"放n个左括号和n个右括号,放的过程中保证,左括号的数量始终大于等于右括号的数量,一共有多少种放法"

递归+回溯。

什么样的递归不用回溯?什么样的递归要回溯?

如果是拆分问题的递归,比如斐波那契数列,就不用回溯。

如果是暴力搜索思想的,比如找路径这种,就需要回溯,防止污染下一个搜索分支。

画了一颗递归树便于理解

java 复制代码
class Solution {
    public List<String> generateParenthesis(int n) {
        LinkedList<String> ans= new LinkedList();
        generate(ans,n,n,"");
        return ans;
    }

    //left记录左括号剩下的,right记录右括号剩下的
    public void generate(LinkedList<String> ans,int left, int right, String thisTurnResult){
        if(left==0 && right ==0){
            ans.add(thisTurnResult);
            return;
        }
        //1、只能放左括号,需要回溯。这里通过传参的方式进行巧妙的回溯
        if(left == right){
            generate(ans,left-1,right,thisTurnResult+"(");

        //2、左括号、右括号都能放
        }else{ 
            //一定是左括号先用完
            if(left>0){
                generate(ans,left-1,right,thisTurnResult+"(");
            }

            generate(ans,left,right-1,thisTurnResult+")");
        }
        
    }
}
相关推荐
昵称小白1 天前
复杂度分析方法
算法
科研前沿1 天前
2026 数字孪生前沿科技:全景迭代报告 —— 镜像视界生成式孪生(Generative DT)技术白皮书
大数据·人工智能·科技·算法·音视频·空间计算
学涯乐码堂主1 天前
有趣的“打擂台算法”
c++·算法·青少年编程·gesp
Tutankaaa1 天前
知识竞赛题库设计全攻略
人工智能·算法
WolfGang0073211 天前
代码随想录算法训练营 Day50 | 图论 part08
数据结构·算法·图论
aini_lovee1 天前
多目标粒子群优化(MOPSO)双适应度函数MATLAB实现
人工智能·算法·matlab
yong99901 天前
图像融合与拼接:完整MATLAB工具箱
算法·计算机视觉·matlab
春风不语5051 天前
深入理解主成分分析(PCA)
算法
apollowing1 天前
启发式算法WebApp实验室:从搜索策略到群体智能的能力进阶(二十二)
算法·启发式算法·web app
晚枫歌F1 天前
最小堆定时器
数据结构·算法