LeetCode22GenerateParentheses--In Java
来源:互联网 发布:互联网与大数据 编辑:程序博客网 时间:2024/05/17 22:08
这个问题让人想到火车进站的次序问题,解的数量可以用卡特兰数求出。
因此我想到其实括号的排列和栈混洗的各个情况是一一对应的。
现有1、2、3三个数字,栈混洗后有123,132,213,231,321五种情况,312是不合法的。
而观察可以发现123这种情况对应着“()()()”这种情况,而132则对应着“()(())”这种情况,因为左括号代表一次入栈,右括号代表一次出栈,同理213就是“(())()”等等。
因此,用递归方法解这个问题,n代表了栈中元素数量,当然栈是“虚拟的”,m代表未入栈的元素个数,每个元素只能入栈一次,也只能出栈一次,这样模拟出栈混洗的各种情况。
public List<String> generateParenthesis(int n) { List<String> result = new LinkedList(); getAllResult(result,0,n,new StringBuilder()); return result; } public void getAllResult(List<String> l,int n,int m,StringBuilder sb){ if(n==0 && m==0){ l.add(sb.toString()); return; } if(m<0||n<0) return; if(m>0){ StringBuilder sr = new StringBuilder(sb);//用一个新串传入下一层递归 getAllResult(l,n+1,m-1,sr.append('(')); } if(n>0){ StringBuilder sr = new StringBuilder(sb); getAllResult(l,n-1,m,sr.append(')')); } }
0 0
- LeetCode22GenerateParentheses--In Java
- Patterns in Java (in English)
- Patterns in Java (in English)
- [Java]Thinking in Java
- Java Thread in JVM
- Scientific Computing in Java
- think in java 读书笔记
- Thinking in Java笔记
- 《Thinking in Java》读书笔记
- Java Thread in JVM
- 《Sleepless In Java》随想
- Pattens In Java
- Thread In Java Technology
- Thinking in java(1)
- Run sql in Java
- Ajax In Java
- Java Thread in JVM
- path in java program
- EJB-EJB的基本分类
- 自定义ListView,禁止上下滑动
- JavaScript String Byte Length of UTF-8
- Hibernate实战读书摘要(1)—理解对象/关系持久化
- Android音乐播放案例
- LeetCode22GenerateParentheses--In Java
- DFS+DP验证 UScow 5.3.1 Milk Measuring 量取牛奶
- C/C++工程DLL中接口的设计
- 静态数据的初始化(Think in java P95页代码解析)
- Swift中闭包的循环引用
- 单点登录cas常见问题(八) - 什么时候会用到代理proxy模式?
- 安卓开发 强制关闭app进程
- 模拟A T M的工作流程编程(-)
- cocos2dx学习之路----第三篇(创建场景)