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+")");
        }
        
    }
}
相关推荐
冻柠檬飞冰走茶10 小时前
PTA基础编程题目集 7-27 冒泡法排序(C语言实现)
c语言·开发语言·数据结构·算法
大鱼>12 小时前
因子挖掘+回测+RL交易:量化金融完整系统
人工智能·深度学习·算法·金融
c2385613 小时前
《枚举算法 “翻译官”:用 enum class 给 “游游的礼盒” 算分》
c语言·c++·算法
吃好睡好便好14 小时前
MATLAB中图像的对数变换
图像处理·学习·算法·计算机视觉·matlab
noipp14 小时前
推荐题目:洛谷 P5843 [SCOI2012] Blinker 的噩梦
c语言·数据结构·c++·算法·游戏·洛谷·luogu
极客BIM工作室14 小时前
OpenCascade 倒角(Chamfer)算法完整逻辑解析
算法
帅次14 小时前
Android 应用高级面试:Window 近1年高频追问 18 题
android·面试·职场和发展
冻柠檬飞冰走茶14 小时前
PTA基础编程题目集 7-20 打印九九口诀表(C语言实现)
c语言·开发语言·数据结构·算法
鱼子星_14 小时前
《算 · 法》题目解析篇(1):最近公共祖先问题,线段树,最长回文子序列
c++·算法·动态规划·递归