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日

相关文章

  • Spring Security 自定义授权服务器实践记录

    Spring Security 自定义授权服务器实践记录 介绍 Spring Security是一个功能非常强大的安全框架,可以用于处理各种身份认证和授权问题。其中,授权服务器是Spring Security的重要组成部分,用于为客户端颁发访问令牌,同时对请求进行验证和授权。本文将详细介绍如何使用Spring Security自定义授权服务器,并给出两个示例…

    Java 2023年5月20日
    00
  • Java中Collection集合常用API之 Collection存储自定义类型对象的示例代码

    让我来详细讲解一下“Java中Collection集合常用API之 Collection存储自定义类型对象的示例代码”的完整攻略。 1. Collection集合常用API 在开始讲解如何存储自定义类型对象之前,我们先简要介绍一下Java中Collection集合常用的API。Collection接口是Java中的集合类中的基本接口,它提供了一系列操作集合的…

    Java 2023年5月26日
    00
  • java数组及arrays类对数组的操作实例

    Java数组及Arrays类对数组的操作实例 什么是数组 数组(Array)是一种用于存储多个相同类型数据的集合,它是在内存中顺序存储的一段连续空间。数组中的每个数据项称为数组元素(Element),它们在数组中的位置称为索引(Index),索引通常从0开始。 Java中的数组具有以下特点: 数组长度固定,一旦确定,就不能再修改。 数组中的元素必须是相同的数…

    Java 2023年5月26日
    00
  • Java基础教程之组合(composition)

    Java基础教程之组合(Composition) 在Java中,组合是一种重要的关系类型。它允许我们在一个类中使用其他类的实例,从而简化代码并提高代码的可重用性。本文将详细介绍组合的概念及其在Java编程中的应用。 什么是组合 组合指的是一个类使用另外一个类的实例作为自己的一个字段,这个字段可以是一个单独的对象也可以是一个对象数组。组合的关系可以用一个UML…

    Java 2023年5月23日
    00
  • java emoji表情存储的解决方法

    让我来为你详细讲解“java emoji表情存储的解决方法”的完整攻略。 1. 需求说明 对于常规的表情,可以很方便的存储在字符串中,但是对于Emoji表情,其Unicode值可能会超出字符串的代表范围,因此需要一种特殊的存储方式来存储Emoji表情。 2. 解决方案 Java中字符串底层的存储以UTF-16编码格式为基础,而对于Emoji表情,其编码范围可…

    Java 2023年5月20日
    00
  • 详解Java的JDBC中Statement与PreparedStatement对象

    详解Java的JDBC中Statement与PreparedStatement对象 对于访问关系型数据库的Java应用程序来说,JDBC是必不可少的一部分。其中的Statement和PreparedStatement对象则是开发者必须熟练掌握的基本知识点。本篇文章将详细介绍Statement和PreparedStatement对象的概念以及如何在Java应用…

    Java 2023年6月16日
    00
  • 基于SpringMVC入门案例及讲解

    以下是关于“基于SpringMVC入门案例及讲解”的完整攻略,其中包含两个示例。 1. 前言 SpringMVC是一种常用的Java Web开发框架,其核心思想是基于MVC模式来实现Web应用程序开发。本攻略将详细讲解基于SpringMVC入门案例及讲解,包括SpringMVC的基本概念、配置方法以及一个示例。 2. SpringMVC的基本概念 以下是Sp…

    Java 2023年5月16日
    00
  • spring security登录成功后跳转回登录前的页面

    确保实现“spring security登录成功后跳转回登录前的页面”的功能,需要进行以下步骤: 配置页面跳转 在spring的配置文件中,需要将页面跳转的路径配置到spring security中。可以使用默认的登录页,也可以自定义一个登录页。 使用默认的登录页: <http> <form-login login-page="/…

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