生成括号
2018-03-12 22:47
260 查看
一、题意
给定 n 对括号,请写一个函数以将其生成新的括号组合,并返回所有组合结果。
样例
给定 n = 3, 可生成的组合如下:
“((()))”, “(()())”, “(())()”, “()(())”, “()()()”
二、分析和解答
这道题我不会,不过我大概是知道:左括号数必须得大于右括号数,否则不成立。
查阅资料后,这是一个递归的操作,虽然有点难想明白。上限是输入的参数n,当左括号的数量小于上限,那么添加一个左括号;当右括号的数量小于左括号的时候,可以添加一个右括号;当左括号和右括号的数量都达到了上限,这个是一个答案。
代码如下:
Note:这里不能使用StringBuilder,因为它涉及到了回滚。因为当达到临界点的时候,如会.append(“(”)后,但是
比如说n=2的时候,递归过程如下:加入一个左括号,再加入一个左括号“((” ,ln = 2,两次加左括号的递归;接着就是进行右括号了,ln=2,跳过,直接加入一个右括号,同理再加入一个“)”,rn = 2,此时第一个满足条件的字符串返回”(())”。
到这里都是正确的,此时开始回溯,ln=2已经结束了,返回ln=1的情况,此时的字符串是”(“,如果使用StringBuilder,那么下一个生成的字符串就成了是”(())(“,也就是保存了上一次正确的那个字符串的内容。开始发生错误。
继续正确的步骤是:”(“添加一个”)”,进入第二个赋值语句的递归,再添加一个”(“,再添加一个”)”。结束
给定 n 对括号,请写一个函数以将其生成新的括号组合,并返回所有组合结果。
样例
给定 n = 3, 可生成的组合如下:
“((()))”, “(()())”, “(())()”, “()(())”, “()()()”
二、分析和解答
这道题我不会,不过我大概是知道:左括号数必须得大于右括号数,否则不成立。
查阅资料后,这是一个递归的操作,虽然有点难想明白。上限是输入的参数n,当左括号的数量小于上限,那么添加一个左括号;当右括号的数量小于左括号的时候,可以添加一个右括号;当左括号和右括号的数量都达到了上限,这个是一个答案。
代码如下:
void _generateParenthesis(ArrayList<String> list,String sb,int ln,int rn,int n){ if(rn > ln) return ; if((ln == n && rn == n)){ list.add(sb); return ; } if(ln < n) _generateParenthesis(list,sb + "(",ln+1,rn,n); if(rn < ln) _generateParenthesis(list,sb + ")",ln,rn+1,n); } public List<String> generateParenthesis(int n) { // write your code here ArrayList<String> list = new ArrayList(); String sb = new String(""); _generateParenthesis(list,sb,0,0,n); return list; }
Note:这里不能使用StringBuilder,因为它涉及到了回滚。因为当达到临界点的时候,如会.append(“(”)后,但是
比如说n=2的时候,递归过程如下:加入一个左括号,再加入一个左括号“((” ,ln = 2,两次加左括号的递归;接着就是进行右括号了,ln=2,跳过,直接加入一个右括号,同理再加入一个“)”,rn = 2,此时第一个满足条件的字符串返回”(())”。
到这里都是正确的,此时开始回溯,ln=2已经结束了,返回ln=1的情况,此时的字符串是”(“,如果使用StringBuilder,那么下一个生成的字符串就成了是”(())(“,也就是保存了上一次正确的那个字符串的内容。开始发生错误。
继续正确的步骤是:”(“添加一个”)”,进入第二个赋值语句的递归,再添加一个”(“,再添加一个”)”。结束
相关文章推荐
- [LintCode] Generate Parentheses 生成括号
- DFS-lintcode生成括号
- [LeetCode] Generate Parentheses 生成括号
- LeetCode 22. Generate Parentheses 生成括号 Python 回溯解法
- Leet Code 22 Generate Parentheses - 生成括号 - Java
- [LeetCode] 22. Generate Parentheses 生成括号
- 生成括号
- LeetCode22 Generate Parentheses 括号生成
- lintcode-427-生成括号
- [Lintcode]Generate Parentheses 生成括号
- Generate Parentheses 生成括号-- LintCode题解
- OpenJPA查询生成的SQL语句,为何Or后面没有括号
- lintcode刷题--生成括号
- LeetCode 22. Generate Parentheses(生成括号)
- [LeetCode系列]括号生成问题
- 给 n 对括号,写一个函数生成所有合适的括号组合。
- Leetcode:Generate Parentheses 生成有效括号对
- Generate Parentheses:生成括号对
- Leetcode 22. 括号生成
- 代码的优化过程: 生成括号 Generate Parentheses