首页 > 其他分享 >LeetCode22.括号生成

LeetCode22.括号生成

时间:2025-01-04 13:24:11浏览次数:1  
标签:backtrack max 生成 括号 回溯 sb open LeetCode22

题目:

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

示例 1:

输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]

示例 2:

输入:n = 1
输出:["()"]

思路:

  • 回溯法。
    如果左括号数量小于 生成括号的对数 ,可以放一个左括号
    如果右括号数量小于左括号的数量, 可以放一个右括号。
  • 跟其他的回溯题目稍有不同, 括号生成,是用 StringBuilder 来保存括号的。
    回溯时 采用了 StringBuilder 的 sb.deleteCharAt( sb.length()-1) 这个语法,来删除掉最后一个元素。

代码:

class Solution {
	//用于存放结果集
   List<String> resultList = new ArrayList<>();

    public List<String> generateParenthesis(int n) {
        backtrack (  new StringBuilder(), 0, 0,  n);
        return resultList;
    }

    public void backtrack( StringBuilder sb, int open, int close, int max) {
        //要乘以2,因为有左右括号
        if (sb.length() == max* 2) {
            resultList.add( sb.toString());
            return;
        }

        if (open < max) {
            //如果左括号数量小于 生成括号的对数  ,可以放一个左括号
            sb.append( '(');
            //递归,继续选择下一个数
            backtrack(sb, open+1, close, max );
            //回溯
            sb.deleteCharAt( sb.length()-1);
        }

        if (close < open) {
            //如果右括号数量小于左括号的数量,可以放一个右括号。这里的比较大小,别写错了
            sb.append( ')');
            backtrack(sb, open, close+1, max );
            //回溯
            sb.deleteCharAt( sb.length()-1);
        }

    }


}

标签:backtrack,max,生成,括号,回溯,sb,open,LeetCode22
From: https://www.cnblogs.com/expiator/p/18651804

相关文章

  • 通过网址或html生成一个简单apk
    GitHub-pzx521521/apk-editor通过网址或html生成一个简单apk之前发过一个使用apktool版本的,简单来说就是一个对apk反编译和编译的过程相比使用apktool有以下优点:[x]没有环境依赖,完全不需要jdk/jre[x]无需中间调用apktool,容易部署到服务器/docker使用OnlineDemo......
  • LLM生成markmap思维脑图
    提示词Createamindmapthatvisuallyorganizesthekeypointsfromthisbook.Themindmapshouldcoverthemajorthemesandconceptsdiscussedinthebook.Breakeachofthesebroadthemesintosubtopics.Provideaclearstructurewithhierarchicalnodesf......
  • Bogus:.NET的假数据生成利器
    我们在项目开发中,为了保证系统功能完整、准确性,我们都需要模拟真实数据进行测试。今天推荐一个开源库,方便我们制造假数据测试。01项目简介Bogus是一个开源的.NET库,它提供了一个强大的工具集,用于生成虚假(mock)数据。方便项目用于测试、填充数据库、创建模拟数据集或生成示例......
  • Meta 的新策略,将 AI 生成的角色整合到其社交媒体平台
    一、Meta新年规划及引人注目的举措多元规划背景:在新的一年,Meta制定了多维度的战略规划,旨在巩固并拓展其在科技领域的影响力。增强现实与元宇宙是其长期布局的重点方向,期望借此塑造未来互联网的交互形态;面对TikTok可能被禁的潜在情况,提前做好准备以吸纳其用户,显示出对用户流量......
  • 使用 Selenium IDE 生成 Java 自动化测试代码
    首先使用SeleniumIDE录制操作。导出为JavaJUnit测试文件。创建Maven项目,并编辑pom.xml添加依赖:我使用的SeleniumIDE版本为3.17.2,其对应的JUnit版本为4.x.x。<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/200......
  • MybatisX-Generator不生成domain文件夹解决方案
    问题描述使用MybatisX-Generator生成数据库表实体以后,发现没有生成domain文件夹以及User.java文件问题原因以及解决方案因为MybatisX版本更新,最新版需要在options里额外勾选model才能生成domain勾选model,点击finish,成功生成domain文件夹,以及User.java文件......
  • 婴儿四维影像生成AI人脸照片-大模型 Agent(智能体)实践
    婴儿四维影像生成AI人脸照片-大模型Agent(智能体)实践在当今科技飞速发展的时代,大模型Agent(智能体)作为一种创新的技术范式,正逐渐崭露头角。它依托强大的大模型能力,通过可视化设计与流程编排,以无代码或低代码的方式,为开发者提供了构建各种功能性应用程序的便捷途径。本文将......
  • 使用 Python 的 yield 创建生成器函数
     Python中的yield关键字将常规函数转换为生成器,它可以按需生成一系列值,而不是一次性计算所有值。Python函数并不总是有返回语句。生成器函数是用yield关键字代替return的函数。这些函数产生生成器迭代器,它是表示数据流的对象。迭代器所代表的元素只有在需要时才会被创......
  • 【语法】生成器
    python中的推导式、生成器_python生成器推导式-CSDN博客“”“生成器应用的场景是在大数据的范围中使用,切记不可直接用for遍历所有,可能无法短时间内获取所有数据”“”使用yield来实现生成器,并使用next进行激活1,__next__()&next()的区别__next__()是生成器对象......
  • a16z:小模型 + 边缘 AI 将定义 2025;音效模型 TangoFlux:3 秒钟生成 30 秒音频丨RTE 开发
      开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑......