LeetCode Generate Parentheses
2015-09-21 07:15
381 查看
原题链接在这里:https://leetcode.com/problems/generate-parentheses/
采用递归调用helper, left, right, 代表还需要加几个左括号和几个右括号。起始赋值都为n, e.g. 若n=3, 就说明一共需要加三个左括号和三个右括号。
递归函数helper终止条件有两个,一个left>right, 说明")"已经比"("加多了,不合法,另一个终止条件是left==0 && right==0说明都加完了。
否则先加左括号,再加右括号。
Time Complexity: exponential. Space: O(n) 一共用了O(n)层stack.
与Unique Binary Search Trees II类似。
AC Java:
采用递归调用helper, left, right, 代表还需要加几个左括号和几个右括号。起始赋值都为n, e.g. 若n=3, 就说明一共需要加三个左括号和三个右括号。
递归函数helper终止条件有两个,一个left>right, 说明")"已经比"("加多了,不合法,另一个终止条件是left==0 && right==0说明都加完了。
否则先加左括号,再加右括号。
Time Complexity: exponential. Space: O(n) 一共用了O(n)层stack.
与Unique Binary Search Trees II类似。
AC Java:
public class Solution { public List<String> generateParenthesis(int n) { List<String> res = new ArrayList<String>(); if(n <= 0){ return res; } String str = new String(); helper(n, n, str, res); return res; } private void helper(int left, int right, String str, List<String> res){ if(left > right){ //if left > right, it means remaining "(" is more than remaining ")" //This means already added more ")" than "(", which is illegal. return; } if(left == 0 && right == 0){ res.add(str); return; } if(left > 0){ helper(left-1, right, str+"(", res); } if(right > 0){ helper(left, right-1, str+")", res); } } }
相关文章推荐
- 品牌为什么爱推定制机
- session的存储方式和配置
- Linux服务管理之httpd-2.4常用配置及phpMyAdmin的安装配置
- ASP.NET页面之间传递值的几种方式
- 读《大道至简—编程的精义》有感
- 数据结构-线性表链式表示
- 《大道至简》第一章读后感
- 当前项目中,linux下memcached的启动/结束的方式
- CUDPP基本执行过程分析
- viewpager不显示
- 写几十行代码,来一场无鼠标编程之旅,看看who is e———(HTML5:HBuilder5.0.0)
- 在win7系统的电脑上安装CentOS7双系统
- 2015年9月14日--9月20日(30小时,剩3485小时)
- UIPercentDrivenInteractiveTransition Controller交互式转场切换动画
- 新的开始
- android给未签名的apk签名
- C++类的const, static 和inline成员函数(变量)
- 如何获取帮助———— QQ群讨论摘要
- Best Time to Buy and Sell Stock II 解答
- 【软剑攻城队】团队介绍发布!