Go java 算法之括号生成示例详解

Go java 算法之括号生成示例详解

算法介绍

本算法是使用回溯算法来实现的,先在左边放置一个'(',再将')'放置在之前的'('后面。在任意时刻,使用的左括号数量都不应超过 n,也就是原本需要生成的数量。

代码实现

public List<String> generateParenthesis(int n) {

    List<String> result = new ArrayList<String>();

    if(n == 0) {
        return result;
    }

    String str = "";
    // 回溯
    backtrack(result, str, 0, 0, n);

    return result;
}

public void backtrack(
        List<String> result,
        String str,
        int open,
        int close,
        int n
){
    if(str.length() == 2*n) { // 生成完n个括号
        result.add(str);
        return;
    }

    // 左括号数量不能超过限制
    if(open<n) {
        backtrack(result, str + '(', open+1, close, n);
    }

    // 如果还有剩余的右括号未使用
    if(close<open) {
        backtrack(result, str + ')', open, close+1, n);
    }

}

示例说明

示例1:

生成括号对数为3个,运行结果如下:


List<String> list = generateParenthesis(3);
System.out.println(list);

输出结果:

["((()))", "(()())", "(())()", "()(())", "()()()"]

示例2:

生成括号对数为4个,运行结果如下:


List<String> list = generateParenthesis(4);
System.out.println(list);

输出结果:

["(((())))", "((()()))", "((())())", "((()))()", "(()(()))", "(()()())", "(()())()", "(())(())", "(())()()", "()((()))", "()(()())", "()(())()", "()()(())", "()()()()"]

以上就是本算法的详细攻略,希望能对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Go java 算法之括号生成示例详解 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • struts2入门介绍及代码实例

    Struts2 入门介绍及代码实例 什么是 Struts2? ​Struts2 是一个基于 Java 网络应用框架,使用 MVC 设计模式,将应用程序分成模型、视图和控制器(model-view-controller,MVC)三部分,它由 Apache 软件基金会主导开发,是 Struts1 的升级版, 通过 Struts2 可以极大地简化 Web 应用的开…

    Java 2023年5月20日
    00
  • Spring,hibernate,struts经典面试笔试题(含答案)

    Spring, Hibernate, Struts 经典面试笔试题攻略 Spring、Hibernate、Struts 是 Java Web 开发中常用的三个框架,也是面试中经常被问到的知识点。本文将介绍一些常见的面试笔试题,并提供详细的解答和示例说明。 Spring 面试笔试题 1. 什么是 Spring? Spring 是一个开源的轻量级 Java 开发…

    Java 2023年5月18日
    00
  • spring boot集成pagehelper(两种方式)

    下面我会详细讲解Spring Boot集成PageHelper的两种方式及相应的示例。 方式一:使用PageHelper Starter 第一步:在pom.xml文件中添加以下依赖: <dependency> <groupId>com.github.pagehelper</groupId> <artifactId&g…

    Java 2023年5月19日
    00
  • 浅谈SpringCloud的微服务架构组件

    关于“浅谈SpringCloud的微服务架构组件”的完整攻略,我可以从以下几个方面进行讲解: 一、什么是微服务架构 微服务架构是一种以服务化思想为核心的分布式系统架构,用于将单个应用程序拆分为一组较小且更独立的服务,每个服务都可以独立部署、升级和扩展,提高了系统的可维护性、可扩展性和弹性。微服务架构的主要优势包括: 每个服务都可以独立部署和伸缩 不同的服务可…

    Java 2023年5月20日
    00
  • JSP隐含对象response实现文件下载的两种方法

    以下是JSP中使用response实现文件下载的两种方法的详细攻略: 1. 使用response的setHeader()方法: 1.1 步骤: 在JSP页面中,需要一个超链接或者按钮,通过它来触发文件下载,比如: html <a href=”download.jsp?file=test.txt”>下载文件</a> 在download.…

    Java 2023年6月15日
    00
  • Spring Boot Maven 打包可执行Jar文件的实现方法

    实现Spring Boot Maven打包成可执行Jar文件的实现方法,主要有两种。 1. 使用Spring Boot Maven插件打包 首先,需要在pom.xml文件中,引入Spring Boot Maven插件,具体如下: <build> … <plugins> … <plugin> <groupId&…

    Java 2023年5月20日
    00
  • JAVA内存模型(JMM)详解

    JAVA内存模型(JMM)详解 什么是JMM JMM 是 Java Memory Model 的缩写,即 Java 内存模型,是一种制定了共享内存系统中多线程访问规则的抽象规范。它规定了 JVM 中各个线程之间的共享变量存储在主内存中,每个线程都有自己的工作内存和虚拟机栈,变量值的更改仅在工作内存中进行,需要同步到主内存中才能被其他线程看到。 JMM 可以保…

    Java 2023年5月26日
    00
  • 使用maven编译Java项目实例

    使用Maven编译Java项目的完整攻略,主要分为以下几个步骤: Step 1:准备工作 在开始编译Java项目之前,需要确保已经安装好了以下软件和环境: JDK:确保已经安装了JDK,并设置了JAVA_HOME环境变量。 Maven:需要先安装Maven,并将其添加到PATH环境变量中。 Step 2:创建项目 在本地计算机上创建一个Java项目,并使用M…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部