LeetCode 22 Generate Parentheses(找到所有匹配的括号组合)
2017-03-08 13:11
656 查看
题目链接 : https://leetcode.com/problems/generate-parentheses/?tab=Description
给一个整数n,找到所有合法的 () pairs
For example, given n = 3, a solution set is:
递归程序:首先合法的pairs一定是左括号个数等于右括号个数。因此对于n对pairs,左括号个数为n个。
递归程序,按照括号个数进行判断。当左括号个数小于n时,str+”(“,当右括号个数小于左括号个数时,str+”)”
分析递归程序需要传递的参数:
首先要将保存结果的List<String> list传递进去,然后是每次修改之后的str,之后需要知道左括号个数 open ,还有右括号个数 close , 最后是最大括号个数为 max
private void backtrack(List<String> list,String str, int open, int close, int max)
当str长度等于2*max时,说明结束,此时需要执行 list.add(str)
当open < max 时 添加一个( 执行 backtrack ( list, str + ”(“, open+1, close, max);
当close < open 时 添加一个 ) 执行 backtrack ( list, str+ “)”, open, close +1 ,max);
因此执行顺序为: 先得到右括号个数连续个数为max时(从下标为0开始)的情况,在得到右括号连续个数为max-1 时的情况 (此时会进行执行添加右括号的命令)
参考代码:
给一个整数n,找到所有合法的 () pairs
For example, given n = 3, a solution set is:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]
递归程序:首先合法的pairs一定是左括号个数等于右括号个数。因此对于n对pairs,左括号个数为n个。
递归程序,按照括号个数进行判断。当左括号个数小于n时,str+”(“,当右括号个数小于左括号个数时,str+”)”
分析递归程序需要传递的参数:
首先要将保存结果的List<String> list传递进去,然后是每次修改之后的str,之后需要知道左括号个数 open ,还有右括号个数 close , 最后是最大括号个数为 max
private void backtrack(List<String> list,String str, int open, int close, int max)
当str长度等于2*max时,说明结束,此时需要执行 list.add(str)
当open < max 时 添加一个( 执行 backtrack ( list, str + ”(“, open+1, close, max);
当close < open 时 添加一个 ) 执行 backtrack ( list, str+ “)”, open, close +1 ,max);
因此执行顺序为: 先得到右括号个数连续个数为max时(从下标为0开始)的情况,在得到右括号连续个数为max-1 时的情况 (此时会进行执行添加右括号的命令)
参考代码:
package leetcode_50; import java.util.ArrayList; import java.util.List; /*** * * @author pengfei_zheng * n对合理括号结果求解问题 */ public class Solution22 { public static List<String> generateParenthesis(int n) { List<String> list = new ArrayList<>(); backtrack(list,"",0,0,n); return list; } private static void backtrack(List<String> list,String str, int open, int close, int max) { if(str.length()==2*max){ list.add(str); return; } if(open<max) backtrack(list,str+"(",open+1,close,max); if(close<open) backtrack(list,str+")",open,close+1,max); } public static void main(String[]args){ List<String> list = generateParenthesis(3); System.out.println(list); } }
相关文章推荐
- LeetCode22——Generate Parentheses(给定n对括号,然后看有多少正确的括号组合)
- Generate Parentheses (括号匹配)【leetcode】
- [leetcode 22]Generate Parentheses-----n对括号可以组成的括号对序列
- LeetCode 22 Generate Parentheses(生成括号)
- LeetCode--Generate Parentheses(括号组合排列)Python
- Generate Parentheses 产生所有括号组合 @LeetCode
- LeetCode 22 Generate Parentheses(生成括号)
- LeetCode-22 Generate Parentheses(合法括号情况)
- 【leetcode】括号符匹配问题(Parentheses):Valid Parentheses|Generate Parentheses|LongestValid Parentheses
- leetcode 22 Generate Parentheses
- LeetCode 32 Longest Valid Parentheses(最长合法的括号组合)
- leetcode 22:Generate Parentheses(15-10-9)
- leetcode-22-Generate Parentheses
- LeetCode 22 — Generate Parentheses(C++ Java Python)
- [leetcode 22] Generate Parentheses
- 回溯之Leetcode22 Generate Parentheses
- Longest Valid Parentheses(最长的括号匹配)【面试算法leetcode】
- leetcode-22 Generate Parentheses
- leetcode 20 Valid Parentheses 括号匹配
- LeetCodet题解--20. Valid Parentheses(括号匹配问题)