Leetcode22括号生成(java实现)

今天分享的题目是Leetcode22括号生成,具体的题目描述如下:

本道题我们使用的解法是回溯。

解题思路:

我们主要是对括号出现的可能性进行一个收集。

我们以n=2举例子,如下图

如果想要合法,那么一定是左括号开始,并且以左括号为开始,要对不合适的进行剔除。可以思考一下,为何最后一个不符合呢?是因为左括号个数为1,右括号个数为1,然后没有以左括号开始。

上面的两种情况合法,第一种情况,左括号个数为2并且右括号个数为2.

所以要想合法的前提是,左括号个数等于右括号,左括号为开始。

具体的代码如下:

java 复制代码
class Solution {
    List<String> res = new ArrayList();
    public List<String> generateParenthesis(int n) {
    backtracking(0,0,n,"");
    return res;
}
    public void backtracking(int left,int right,int n ,String str){
        if(left<right){
            return;
        }
        //收集结果
        if(left==n&&right==n){
            res.add(str);
            return;
        }
        //补左括号,left个数加1
        if(left<n){
        backtracking(left+1,right,n,str+"(");
        }
        //补右括号,右括号数量加1
        if(left>right){
        backtracking(left,right+1,n,str+")");
        }
        
    }
}
相关推荐
企业数字化笔记1 分钟前
多租户配额怎么控制?用量口径、并发预留与超额处理的实现方法
java·数据库·spring boot
星夜离尘5618 分钟前
MATLAB 线性去趋势为何损伤低频正弦:联合最小二乘估计幅相与漂移
开发语言·matlab
巴勒个啦30 分钟前
Prompt Engineering 实战:5 个让 AI 生成生产级业务代码的工程模式
java·前端
倚楼听风语1 小时前
Kotlin 协程与 suspend 原理详解
java·算法·kotlin
程序员清风1 小时前
双指针与滑动窗口:高效处理连续区间
开发语言·算法
开开心心就好1 小时前
文件被占用删不掉?解锁工具强制删除
java·运维·服务器·开发语言·前端·pdf·ocr
weixin_460443561 小时前
Java+Linux私有化训考平台:服务、数据库与终端部署结构解析
java·linux·数据库·私有化部署·企业培训考试系统·企业考试系统
云和数据.ChenGuang1 小时前
python大小整数范围解析
java·开发语言·python
Java内核笔记2 小时前
Spring AI 生产级 Chat 接口:6 个开关、13 个坑,其中 2 个开关根本没生效
java·人工智能·后端
雷一言说2 小时前
Spring AI 2.0 RAG:用 Metadata Filter 做多租户检索隔离
java·spring