LeetCode 22:Generate Parentheses的递归,回溯两种解法
来源:互联网 发布:大数据与精准医学 编辑:程序博客网 时间:2024/04/28 01:46
Generate Parentheses
Given n pairs of parentheses, write a function to generate all
combinations of well-formed parentheses.For example, given n = 3, a solution set is:
“((()))”, “(()())”, “(())()”, “()(())”, “()()()”
递归
class Solution {public: void unguarded_generate(vector<string> &result, string &curr, int m, int n) { // m,n分别表示未放置的'(',')'的数量 if(m==0 && n==0) { result.push_back(curr); return; } if(m>0) // 任何情况m一定小于等于n { curr.push_back('('); unguarded_generate(result, curr, m-1, n); curr.pop_back(); } if(m<n) // 此时可以放), n-1后仍满足m<=n { curr.push_back(')'); unguarded_generate(result, curr, m, n-1); curr.pop_back(); } } vector<string> generateParenthesis(int n) { vector<string> result; string curr; curr.reserve(2*n); unguarded_generate(result, curr, n, n); return result; }};
回溯
这题的tag上有Backtracking,所以就想用回溯解。
思路是,先放'('
后放')'
,满了之后回溯前一个可以修改的'('
,回溯到最左边时结束。
m表示未安放的'('
的数量,n表示未安放的')'
的数量,正常的安放过程中,m一定小于等于n。回溯的循环条件中有一个m>n-2,因为后面有++m,–n的操作,所以要保证m+1<=n-1,即m<=n-2,如果条件不满足则要继续循环。
与递归相比,少了递归的开销,效率较高。
class Solution{public: vector<string> generateParenthesis(int k) { vector<string> result; string curr; curr.reserve(2*k); int m=k,n=k; while(1) { while(m>0) { curr.push_back('('); --m; } while(n>0) { curr.push_back(')'); --n; } result.push_back(curr); while(*curr.rbegin()==')' || m>n-2) { if(*curr.rbegin()=='(') ++m; else ++n; curr.pop_back(); if(curr.size()==0) return result; } *curr.rbegin()=')'; ++m; --n; } }};
0 0
- LeetCode 22:Generate Parentheses的递归,回溯两种解法
- leetcode 22. Generate Parentheses-回溯|递归
- [leetcode][回溯] Generate Parentheses
- [leetcode] 22 Generate Parentheses(递归)
- leetcode---Generate Parentheses---递归
- leetcode Generate Parentheses 回溯算法
- LeetCode第21题之Generate Parentheses(两种解法)
- LeetCode-22-Generate Parentheses(DFS/递归)-Medium
- LeetCode Generate Parentheses递归方法
- leetcode 22. Generate Parentheses 递归
- Leetcode-Generate Parentheses(递归)
- LeetCode OJ-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
- STM32的DAC
- [LeedCode OJ]#9 Palindrome Number
- hdu2063 二分图
- 获取hadoop的源码和通过eclipse关联hadoop的源码
- 怎样在几何画板中画数轴
- LeetCode 22:Generate Parentheses的递归,回溯两种解法
- Win7下通过eclipse远程连接CDH集群来执行相应的程序以及错误说明
- javaweb 学习总结-孤傲苍狼
- [置顶]快速排序的递归方式和非递归方式
- POJ 1410 Intersection(判断线段和矩形是否相交)
- Bash编程容易犯的错误
- STM32 DMA
- 网站图片加载速度
- 如何将带数据的SQLite数据与apk程序一起发布