FTPrep, 22 Generate Parenthese
来源:互联网 发布:机海战术 知乎 编辑:程序博客网 时间:2024/06/09 05:37
generate something, 在这里本质上就是生成一个string,按照一定的规则,这个规则就是一棵选择树,不断的向下分支,然后再融合,就是典型的DFS的方法。然后DFS方法就是典型的递归的方法!把当前的任务看成单独的一项,然后在处理下一个单元时,通过call 自己本身递归出去。
既然是递归就要有三要素:1,递归出口;2,当前的处理,通常是根据一定的条件选择,比如几种分支,大小判断等等;3,递归点,也就是递归出去的地方在na
代码如下,要做到一眼看出
public class Solution { public List<String> generateParenthesis(int n) { List<String> list= new ArrayList<String>(); if(n==0) return list; parenGenerator(n, 0, 0, list, ""); return list; } private void parenGenerator(int limit, int left, int right, List<String> list, String paren){ if(left==limit && right == limit){ list.add(paren); return; } if(left<limit) parenGenerator(limit, left+1, right, list, paren+"("); if(right<left) parenGenerator(limit, left, right+1, list, paren+")"); }}
修改变量名,增加代码可读性:
class Solution { public List<String> generateParenthesis(int n) { List<String> result= new ArrayList<String>(); if(n==0) return result; generateParens(result, "", 0, 0, n); return result; } private void generateParens(List<String> result, String str, int existingLeftParen, int existingRightParen, int maxParen){ if(existingLeftParen==maxParen && existingRightParen==maxParen){ result.add(str); return; } if(existingLeftParen<maxParen) generateParens(result, str+"(", existingLeftParen+1, existingRightParen, maxParen); if(existingRightParen<existingLeftParen) generateParens(result, str+")", existingLeftParen, existingRightParen+1, maxParen); } }
关于这题还可以和parenthesis的判断的那一题进行比较,那道题是check,这道题是generate,但是遵循的规则是一样的,左右两边要平衡,balanced parens,链接:点击打开链接
TODO: 关于parens的题目前看到的就有3道:
1,这道:典型的dfs,可以很phone number联系起来记忆
2,valid parens 判断是否是valid parens,典型的用stack来处理。
3,longest valid parens, 一道hard题,也是用stack来处理,但是!push进的index,难点在于怎么track valid parens的起始位置。
阅读全文
0 0
- FTPrep, 22 Generate Parenthese
- [leetcode] Generate Parenthese
- leetcode generate parenthese
- Valid Parenthese
- valid Parenthese
- LeetCode 22: Generate Parentheses
- [leetcode 22] Generate Parentheses
- LeetCode | #22 Generate Parentheses
- [Leetcode] 22- Generate Parentheses
- LeetCode 22 Generate Parentheses
- [LeetCode 22]Generate Parentheses
- leetcode 22 Generate Parentheses
- Leetcode 22 Generate Parentheses
- LeetCode 22 - Generate Parentheses
- Generate Parentheses - LeetCode 22
- leetcode 22 -- Generate Parentheses
- 22-m-Generate Parentheses
- leetcode-22Generate Parentheses
- Java接口的概念
- 17.数据库对象----索引(index)
- H5---js有哪些内置对象?和介绍js的基本数据类型
- BZOJ 2823: [AHOI2012]信号塔 随机增量法
- vagrant查询虚拟机
- FTPrep, 22 Generate Parenthese
- Linux开发环境搭建与使用——Linux必备软件之Samba
- Java中Synchronized的用法
- springboot配置druid
- HibernateDaoSupport的getHibernateTemplate.find()方法带参查询返回结果是nul问题解决
- 错误总结
- 论如何掌握一个程序
- openstack搭建--7--创建一台虚拟机
- rabbitmq配置