LeetCode 22 :Generate Parentheses
2016-12-07 21:27
218 查看
作为经典的回溯问题,这道题对于理解回溯的基本框架帮助还是挺大的。
所谓Backtracking都是这样的思路:在当前局面下,你有若干种选择。那么尝试每一种选择。如果已经发现某种选择肯定不行(因为违反了某些限定条件),就返回;如果某种选择试到最后发现是正确解,就将其加入解集
所以在思考问题的时候,首先需要考虑:
1. 边界条件(任何算法都需要考虑这个,往往输入并不如你所想那么理想)
2. 满足解的条件(当满足解,则添加进解集,这有点像并查集,当然有的只需要返回一个解即可)
3. 否则继续寻找
对于这道题,在任何时刻,你都有两种选择:左括号或者有括号,同时也有边界条件:
当左括号的数量大于右括号的数量时,则返回,即不可能存在解。
同时,当满足左右两边括号用完之后,即满足条件的解,此时加入到解集当中,否则继续寻找。
public class Solution { public List<String> ans = new ArrayList<>(); public void robot(int left , int right,String str ){ //不可能存在合理的解 返回 不继续搜索 if(left>right) return; //满足条件的解 if(left==0 && right==0){ ans.add(str); return; }else{ //枚举不同的可能性 if(left>0){ robot(left-1,right,str+"("); } if(right>0){ robot(left,right-1,str+")"); } } } public List<String> generateParenthesis(int n) { robot(n,n,""); return ans; } }
相关文章推荐
- Win2003利用dfs(分布式文件系统)在负载均衡下的文件同步配置方案
- C#避免回溯方法心得
- C语言使用回溯法解旅行售货员问题与图的m着色问题
- win2003分布式文件系统(dfs)配置方法[图文详解]
- win2003分布式文件系统及其部署 图文教程
- leetcode 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- leetcode刷题,没想到这么难搞!
- Hadoop2.6+jdk8的安装部署(1)——使用jar包安装部署【详细】
- Hadoop FS Shell
- 回溯算法 图m着色问题
- DFS使用方法总结
- leetcode----Longest Substring Without Repeating Characters
- FastDFS注意事项
- 无忧技术带您预览DFS(分布式文件系统)管理控制台
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III