博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode22GenerateParentheses--In Java
阅读量:4089 次
发布时间:2019-05-25

本文共 953 字,大约阅读时间需要 3 分钟。

这个问题让人想到火车进站的次序问题,解的数量可以用卡特兰数求出。 
因此我想到其实括号的排列和栈混洗的各个情况是一一对应的。 
现有1、2、3三个数字,栈混洗后有123,132,213,231,321五种情况,312是不合法的。 
而观察可以发现123这种情况对应着“()()()”这种情况,而132则对应着“()(())”这种情况,因为左括号代表一次入栈,右括号代表一次出栈,同理213就是“(())()”等等。 
因此,用递归方法解这个问题,n代表了栈中元素数量,当然栈是“虚拟的”,m代表未入栈的元素个数,每个元素只能入栈一次,也只能出栈一次,这样模拟出栈混洗的各种情况。

public List
generateParenthesis(int n) { List
result = new LinkedList(); getAllResult(result,0,n,new StringBuilder()); return result; } public void getAllResult(List
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(')')); } }
 

转载地址:http://ifdii.baihongyu.com/

你可能感兴趣的文章
poj 1976 A Mini Locomotive (dp 二维01背包)
查看>>
《计算机网络》第五章 运输层 ——TCP和UDP 可靠传输原理 TCP流量控制 拥塞控制 连接管理
查看>>
《PostgreSQL技术内幕:查询优化深度探索》养成记
查看>>
剑指_复杂链表的复制
查看>>
FTP 常见问题
查看>>
shell 快捷键
查看>>
MODULE_DEVICE_TABLE的理解
查看>>
编译Android4.0源码时常见错误及解决办法
查看>>
Android 源码编译make的错误处理
查看>>
启用SELinux时遇到的问题
查看>>
No devices detected. Fatal server error: no screens found
查看>>
db db2 base / instance database tablespace container
查看>>
db db2_monitorTool IBM Rational Performace Tester
查看>>
Android 解决TextView设置文本和富文本SpannableString自动换行留空白问题
查看>>
Android自定义View实现商品评价星星评分控件
查看>>
postgresql监控工具pgstatspack的安装及使用
查看>>
postgresql减少wal日志生成量的方法
查看>>
swift中单例的创建及销毁
查看>>
获取App Store中App的ipa包
查看>>
利用runtime给类别添加属性
查看>>