首页 > 编程语言 >java编程题,打印n对括号的全部有效组合

java编程题,打印n对括号的全部有效组合

时间:2023-08-18 15:07:10浏览次数:37  
标签:count java buffer rightRem 编程 list leftRem 括号

如题所述,当n=3时,可能的组合有:(()()), ((())), ()(()), (())(), ()()()

代码如下(有注释):

import java.util.ArrayList;

import java.util.List;

public class Test06 {

/**

* 通过递归生成n对括号的全部有效组合

* @param list 装括号组合的容器

* @param leftRem 左括号剩余数量

* @param rightRem 右括号剩余数量

* @param buffer 放括号的字符数组

* @param count 插入括号的位置

*/

private static void make(List<String> list, int leftRem, int rightRem, char[] buffer, int count) {

if(leftRem < 0 || rightRem < leftRem) { // 无效输入

return ;

}

if(leftRem == 0 && rightRem == 0) { // 木有括号了

String s = String.copyValueOf(buffer);

list.add(s);

}

else {

if(leftRem > 0) { // 还有左括号可用则加入左括号

buffer[count] = '(';

make(list, leftRem - 1, rightRem, buffer, count + 1);

}

if(rightRem > leftRem) { // 右括号比左括号跟多就可以加入右括号

buffer[count] = ')';

make(list, leftRem, rightRem - 1, buffer, count + 1);

}

}

}

/**

* 生成n对括号的全部有效组合

* @param count 有几对括号

* @return 装有所有括号组合的列表容器

*/

public static List<String> generate(int count) {

char[] buffer = new char[count * 2];

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

make(list, count, count, buffer, 0);

return list;

}

public static void main(String[] args) {

List<String> list = generate(3); // 生成3对括号的所有组合

for(String str : list) {

System.out.println(str);

}

}

}

标签:count,java,buffer,rightRem,编程,list,leftRem,括号
From: https://blog.51cto.com/u_16207997/7136275

相关文章

  • Java 工具类库:Hutool使用说明
    Hutool是什么Hutool是一个Java工具包类库,它可以对文件、流、加密解密、转码、正则、线程、XML等JDK方法进行封装,组成各种Utils工具类。Hutool即是Hu(谐音“糊涂”)+tool,前者致敬作者“前任公司”,后者为工具之意,谐音“糊涂”,寓意追求“万事都作糊涂观,无所谓失,无所谓得”的......
  • java实现音乐随机播放算法
    importjava.util.*;publicclassRandomDemop{staticRandomrd=newRandom();//获取随机数的工具staticListnList=newArrayList();//保存随机数//获取随机数publicstaticvoidgetRandomNum(){for(inti=1;i<6;i++){nList.add(newInteger(rd.next......
  • Java 网络编程
    网络编程1.概述地球村:你在西安,你一个美国的朋友!信件:计算机网络:计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。网络编程的目的:无线电台..........
  • 【校招VIP】 java语言考点之异常
    考点介绍:导致程序的正常流程被中断的事件,叫做异常。异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。异常发生的原因有很多,通常包含以下几大类:1.用户输入了非法数据。2.要打开的文件不存在。3.网络通信时连接中断,或者JVM内存溢出。一、考点题目......
  • JavaSE学习笔记day04
    IO流概念:OS的文件系统:(1)文件:文本文件、视频文件、音频文件、图像文件、可执行文件等等,这些文件都是由一个个字节组成的。(2)目录(文件夹):对文件进行归纳划分,将同类型的文件方法在同一个文件夹中,方便我们管理和使用。(3)资源访问路径:1)相对路径:相对于某一个文件夹......
  • 钉钉机器人监控项目异常_JavaWeb实现
    在prod环境,项目所触发的运行时异常,developer往往无法第一时间得知讯息(在没有项目监控的前提下),为了解决这一问题,可以利用钉钉机器人监控项目异常,实时通知/警报给developer。1>自定义紧急异常EmergencyException2>在重要业务中产生的异常转换为此异常3>在全局异常捕获,针对此......
  • JAVA面试知识更新不断
    关注公众号,更多惊喜后续知识等着你知识无边界,它如同一条连绵不绝的河流,源源不断地流淌着。正如今天我们迁移到新平台一样,我们以崭新的姿态面对无限的可能性。迁移到新平台,意味着我们跨越了过去的界限,踏上了新的征程。这是一个机会,一个展示我们创造力和适应能力的舞台。新平台可......
  • 25大编程代码
    注册功能代码二次优化#如何将校验用户是否已存在和注册用户逻辑合并因为两者其实都属于用户注册功能将校验用户是否存在的代码嵌入到注册代码中即可通过返回值来控制#针对核心逻辑层的函数返回值做了优化返回多个数据目前是两个第一个用于告知......
  • 2 JavaScript的基础类型
    2JavaScript的基础类型JS虽然是一个脚本语言.麻雀虽小,五脏俱全.在js中也是可以像其他编程语言一样.声明变量,条件判断,流程控制等等.我们先看一下JS中的数据类型在js中主要有这么几种数据类型(基本)number数字,不论是整数还是小数,数据类型都是numberstring字......
  • 7种创建方式,带你理解Java的单例模式
    本文分享自华为云社区《《Java极简设计模式》第01章:单例模式(Singleton)》,作者:冰河。单例设计模式看几个单例对象的示例代码,其中有些代码是线程安全的,有些则不是线程安全的,需要大家细细品味,这些代码也是在高并发环境下测试验证过的。代码一:SingletonExample1这个类是懒汉模式......