Generate Parentheses 解答
2015-10-18 01:07
274 查看
Question
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:
"((()))", "(()())", "(())()", "()(())", "()()()
Solution 1
Two conditions to check:if remained left '(' nums < remained right ')', for next char, we can put '(' or ')'.
if remained left '(' nums = remained right ')', for next char, we can only put '('.
Draw out the solution tree, and do DFS.
public class Solution { public List<String> generateParenthesis(int n) { List<String> result = new ArrayList<String>(); List<Character> list = new ArrayList<Character>(); dfs(n, n, list, result); return result; } private void dfs(int leftRemain, int rightRemain, List<Character> list, List<String> result) { if (leftRemain < 0 || rightRemain < 0 || leftRemain > rightRemain) return; if (leftRemain == 0 && rightRemain == 0) { int size = list.size(); StringBuilder sb = new StringBuilder(size); for (char tmpChar : list) sb.append(tmpChar); result.add(sb.toString()); return; } if (leftRemain == rightRemain) { list.add('('); dfs(leftRemain - 1, rightRemain, list, result); list.remove(list.size() - 1); } else { list.add(')'); dfs(leftRemain, rightRemain - 1, list, result); list.remove(list.size() - 1); list.add('('); dfs(leftRemain - 1, rightRemain, list, result); list.remove(list.size() - 1); } } }
Solution 2
A much simpler solution.public class Solution { public List<String> generateParenthesis(int n) { List<String> result = new ArrayList<String>(); List<Character> list = new ArrayList<Character>(); dfs(n, n, "", result); return result; } private void dfs(int leftRemain, int rightRemain, String prefix, List<String> result) { if (leftRemain < 0 || rightRemain < 0 || leftRemain > rightRemain) return; if (leftRemain == 0 && rightRemain == 0) { result.add(new String(prefix)); return; } if (leftRemain > 0) dfs(leftRemain - 1, rightRemain, prefix + "(", result); if (rightRemain > 0) dfs(leftRemain, rightRemain - 1, prefix + ")", result); } }
相关文章推荐
- 在spring中使用junit测试
- git 重装系统后的配置
- 文件系统中的目录查找
- 又多长时间没发东西了
- VS2010设置全局Include和Lib目录
- Web Animations
- JAVA中,instanceof的讲解
- css网页编程【详解】
- Android中View的绘制流程详解
- Java基础---IO(二)--Properties类、打印流、序列流、对象操作流、数据输入输出流
- 止语是一种修行
- C++代码静态分析工具splint
- poj 3294(后缀数组)
- [自动运维]ant脚本打包,上传文件到指定服务器,并部署
- JAVA基础学习(二十四)--Socket基础一UDP与TCP的基本使用
- Counting Black --- 暴力做法
- 信息安全系统设计基础第五周学习总结
- OC常用数据类型大全解
- 2015 NEERC F. Gourmet and Banquet
- 在HTML5里用Ajax上传文件到Java Servlet