Generate Parentheses
2015-08-10 20:55
267 查看
1. Problem
给定n对括号,生成所有可能的括号组合Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses. For example, given n = 3, a solution set is: "((()))", "(()())", "(())()", "()(())", "()()()"
2. Solution
采用树的方式来选择生成所有的组合结果树,每种组合是树的一个遍历分支。有两种方法,基本一样的。
第一种,定义三个变量:
lLeft:表示还没有用的左括号数;
rLeft:表示还没有用的右括号数;
now:表示当前已用的字符串;
其中lLeft<=rLeft始终成立。则有如下判断:
lLeft == 0:左括号用完,加上剩下的右括号,构建一个完整的串;
lLeft != 0:
接下来可以加一个左括号(总是可以)
如果lLeft < rLeft,则接下来也可以加一个右括号
代码如下:
public class Solution { List<String> res; public void expand( String now, int i, int j, int n ){ //finish matching if( i == n ){ res.add( now ); return; } //all left parentheses are used if( i + j == n ) expand( now + ")", i+1, j-1, n ); //there're still unused left parentheses else{ //there're still unmatched left parentheses if( j > 0 ){ expand( now + "(", i, j+1, n ); expand( now + ")", i+1, j-1, n ); } //all used left parentheses are matched at present else if( j == 0 ) expand( now + "(", i, j+1, n ); } } public List<String> generateParenthesis( int n ){ res = new ArrayList<String>(); expand( "(", 0, 1, n ); return res; } }
View Code
相关文章推荐
- Oil Deposits
- mac os OS X 优山美地(Yosemite)如何提高最大连接数限制
- 03 推箱子
- 并发编程之一:多进程
- LeetCode(26) Remove Duplicates from Sorted Array
- CSU 1113 Updating a Dictionary
- WPF 实现带标题的TextBox
- poj 2367 Genealogical tree (拓扑排序)
- LeetCode(26) Remove Duplicates from Sorted Array
- 【Java】【Flume】Flume-NG阅读源代码AvroSink
- 20150810训练题
- Ubuntu默认防火墙安装、启用、配置、端口、查看状态相关信息
- 二分搜索(Binary Search)
- HttpSessionListener实现session定时扫描仪
- UITableView 总结
- poj 1182 食物链 经典并查集
- 每天读两本书的方法
- SGU 415. Necessary Coins ( 背包dp )
- 巧用SQL Server Profiler
- HDOJ 1513 Palindrome (最长公共子序列 LCS)