Leetcode22. Generate Parentheses(生成有效的括号组合)
来源:互联网 发布:铁通和广电网络哪个好 编辑:程序博客网 时间:2024/05/29 07:50
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/74937307冷血之心的博客)
该题目的意思是输入一个正整数N,打印出所有符合要求的括号组合。
这道题面试的时候遇到过,掩面哭泣并没有回答出来,好难受。
对于括号的组合,要考虑其有效性。比如说,)(, 它虽然也是由一个左括号和一个右括号组成,但它就不是一个有效的括号组合。 那么,怎样的组合是有效的呢?对于一个左括号,在它右边一定要有一个右括号与之配对, 这样的才能是有效的。所以,对于一个输出,比如说(()()), 从左边起,取到任意的某个位置得到的串,左括号数量一定是大于或等于右括号的数量, 只有在这种情况下,这组输出才是有效的。我们分别记左,右括号的数量为left和right, 如下分析可看出,(()())是个有效的括号组合。
这样一来,在程序中,只要还有左括号,我们就加入输出串,然后递归调用。 当退出递归时,如果剩余的右括号数量比剩余的左括号数量多,我们就将右括号加入输出串。 直到最后剩余的左括号和右括号都为0时,即可打印一个输出串。
package package10;import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<String> list = generate(1); // 生成3对括号的所有组合 for(String str : list) { System.out.println(str); } } /** * 生成n对括号的全部有效组合 * @param num 有几对括号 * @return 装有所有括号组合的列表容器 */ public static List<String> generate(int num) { char[] buffer = new char[num * 2]; List<String> list = new ArrayList<String>(); make(list, num, num, buffer, 0); return list; } /** * 通过递归生成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); } } } }
如果对你有帮助,记得点赞哦~欢迎大家关注我的博客,可以进群366533258一起交流学习哦~
本群给大家提供一个学习交流的平台,内设菜鸟Java管理员一枚、精通算法的金牌讲师一枚、Android管理员一枚、蓝牙BlueTooth管理员一枚、Web前端管理一枚以及C#管理一枚。欢迎大家进来交流技术。
阅读全文
1 0
- Leetcode22. Generate Parentheses(生成有效的括号组合)
- LeetCode22 Generate Parentheses 括号生成
- LeetCode22——Generate Parentheses(给定n对括号,然后看有多少正确的括号组合)
- Generate Parentheses 生成合法的括号组合
- 22.Generate Parentheses&n对括号的全部有效组合
- Leetcode:Generate Parentheses 生成有效括号对
- [LeetCode22]Generate Parentheses
- [Java]LeetCode22 Generate Parentheses
- LeetCode22:Generate Parentheses
- LeetCode22. Generate Parentheses
- LeetCode22. Generate Parentheses
- LeetCode22. Generate Parentheses
- Leetcode22 Generate Parentheses
- LeetCode22. Generate Parentheses
- Leetcode22: Generate Parentheses
- leetcode22:Generate Parentheses
- LeetCode22.Generate Parentheses
- Generate Parentheses 生成有意义的括号对
- 上海大学金马5校比赛部分题解
- 前端路由的实现原理
- 分布式学习(一)
- MVC
- AndroidThings学习笔记--pwm控制Led闪烁
- Leetcode22. Generate Parentheses(生成有效的括号组合)
- QString 中文编码转换
- java中输入字符串并输入每个汉字的ASC码
- 获取Activity栈,判断当前Activity位置
- Java swing实现分页显示代码
- Hyperledger Fabric入门 -------- ( Hyperledger-fabric-doc.pdf)
- ArrayList 实现冒泡排序
- UGUI之菜单动画效果制作思路
- execute、executeQuery和executeUpdate之间的区别