栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

学习笔记--递归括号序列(java)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

学习笔记--递归括号序列(java)

时间限制: 5.0s 内存限制: 512.0MB 本题总分:25 分
            【问题描述】
            给定一个括号序列,要求尽可能少地添加若干括号使得括号序列变得合法,
            当添加完成后,会产生不同的添加结果,请问有多少种本质不同的添加结果。
            两个结果是本质不同的是指存在某个位置一个结果是左括号,而另一个是右括
            号。
            例如,对于括号序列 (((),只需要添加两个括号就能让其合法,有以下几
            种不同的添加结果:()()()、()(())、(())()、(()()) 和 ((()))。
            【输入格式】
            输入一行包含一个字符串 s,表示给定的括号序列,序列中只有左括号和
            右括号。
            【输出格式】
            输出一个整数表示答案,答案可能很大,请输出答案除以 1000000007 (即
            10 9 + 7) 的余数。
            【样例输入】
            ((()
            【样例输出】
            5
            【评测用例规模与约定】
            对于 40% 的评测用例,|s| ≤ 200。
            对于所有评测用例,1 ≤ |s| ≤ 5000。
    
    我感觉大概意思是补全括号然后算出括号的有多少种结果
    先遍历括号,找到缺少的括号补全
    补全之后,利用递归来把所有可能的结果尝试出来,
    (因为没有具体的测试,只是测试了一个例子,可能会超时,也没做过其他解)

public static void main(String[] args) {
		String s="((()";
		int left=0,right=0;
		for(int i=0;i right) right++;
			if(left < right) left++;			
		}
		Listlist=new ArrayList<>();
		fun(left,right,s,list);
		System.out.println(list.size()%1000000007);
	}
	public static void fun(int i,int j,String s,Listlist) {
		if(i == 0 && j == 0) {
			list.add(s);
			return;
		}
		if(i>0) {
			fun(i-1,j,s+"(",list);
		}
		if(i 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/777526.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号