LeetCode Generate Parentheses
2016-01-02 15:10
288 查看
题目:
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:
题意:
给定一个n,表示的是括号的对数,然后将所有合理的括号对数的形式输出。
题解:
将这题抽象成一棵树来处理,也就是采用采用递归来做,具体过程见下图:
就是采用上述过程,其中左子树表示的是添加左括号,右子树表示的是添加右括号。其中添加左括号的标准是当这个left值大于0,而当左子树的值大于右子树的值时,则返回空,说明已经不可能了。
public List<String> generateParenthesis(int n)
{
if(n < 0)
return null;
List<String> list = new ArrayList<String>();
String str = new String();
dfs(list,str,n,n);
return list;
}
public void dfs(List<String> list,String str,int left,int right)
{
if(left > right)
return;
if(left == 0 && right == 0)
list.add(str);
if(left > 0)
dfs(list,str + "(",left - 1,right);
if(right > 0)
dfs(list,str + ")",left,right - 1);
}非常巧妙,可以好好理解一下。
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:
"((()))", "(()())", "(())()", "()(())", "()()()"
题意:
给定一个n,表示的是括号的对数,然后将所有合理的括号对数的形式输出。
题解:
将这题抽象成一棵树来处理,也就是采用采用递归来做,具体过程见下图:
就是采用上述过程,其中左子树表示的是添加左括号,右子树表示的是添加右括号。其中添加左括号的标准是当这个left值大于0,而当左子树的值大于右子树的值时,则返回空,说明已经不可能了。
public List<String> generateParenthesis(int n)
{
if(n < 0)
return null;
List<String> list = new ArrayList<String>();
String str = new String();
dfs(list,str,n,n);
return list;
}
public void dfs(List<String> list,String str,int left,int right)
{
if(left > right)
return;
if(left == 0 && right == 0)
list.add(str);
if(left > 0)
dfs(list,str + "(",left - 1,right);
if(right > 0)
dfs(list,str + ")",left,right - 1);
}非常巧妙,可以好好理解一下。
相关文章推荐
- 黑马程序员-C语言-数组名作为函数参数
- 16.怎样自学Struts2之Struts2异常处理[视频]
- Android Studio使用
- 利用Xcode的代码块提高效率
- python十个实战项目
- android - activity和fragment生命周期
- upgrade bash to v4.2 on MAC
- Android——universal-imageloader开源库的使用
- Android面试宝典(一位优秀应届生面试经验,很多Android高阶问题)
- EL表达式与JSTL(C)标签
- 实现strcmp非常easy的思维
- 如何获取byte的各个bit值以及常见位操作
- Android中的FragmentManager的问题
- Matlab求方差,均值,均方差,协方差的函数
- hdoj1969Pie【二分】
- online_judge_1162
- Objective-C语言——Extension延展
- <php+mysql>failed to open stream: Permission denied问题解决办法
- Makefile的一种通用写法
- 【Android】自定义View -- 钟表