LeetCode Generate Parentheses
2013-12-09 21:35
375 查看
这题以前做过,用递归做的,写了个递归程序也算是调了一会儿,通了。想了想是不是能不用递归呢?一个多小时吧,答案是肯定的。
非递归算法的说明:其实(和) 相当于01两种状态,对于长度为3,相当便利000,001,010,011...111,怎么模拟这过程呢?我用了一个数组记录进位,从最后一位开始,当前位为2时,当前位变为0,前一位加一,一直到第一位有了进位。注意是每一次便利了2*n位时,才相加一位。
PS:不过说来也有意思,递归的程序运行16ms,非递归的运行72ms,leetCode的编译器也就是能通过就行。
void generate(vector<string> &ret,vector<string> &path,int left,int right,int n) { if (left<n) { path.push_back("("); left++; generate(ret,path,left,right,n); path.pop_back(); left--; } if (right<left) { path.push_back(")"); right++; generate(ret,path,left,right,n); path.pop_back(); right--; } if (left == right&& left == n) { string str=""; for (int i=0;i<path.size();i++) { str += path[i]; } ret.push_back(str); } } vector<string> generateParenthesis(int n) { vector<string> vec; vector<string> stk; generate(vec,stk,0,0,n); return vec; } ////////////////////////////////////////////////////////////////////////// vector<string> generateParenthesis2(int n) { int left=0,right=0; int *pfalg = new int[2*n]; string strtemp=""; vector<string> ret; memset(pfalg,0,2*n*sizeof(int)); while(pfalg[0]!=2) { strtemp = ""; for (int i=0;i<2*n;i++) { if (pfalg[i]==0) { strtemp +="("; left++; } else { strtemp +=")"; right++; } if (right>left||left>n||right>n) { strtemp = ""; left = 0; right = 0; break; } } if (strtemp!="") { ret.push_back(strtemp); } int i=2*n-1; pfalg[i]++; while(pfalg[i]==2) { pfalg[i]=0; pfalg[i-1]++; if (pfalg[0]==2) { return ret; } i--; } } return ret; }
非递归算法的说明:其实(和) 相当于01两种状态,对于长度为3,相当便利000,001,010,011...111,怎么模拟这过程呢?我用了一个数组记录进位,从最后一位开始,当前位为2时,当前位变为0,前一位加一,一直到第一位有了进位。注意是每一次便利了2*n位时,才相加一位。
PS:不过说来也有意思,递归的程序运行16ms,非递归的运行72ms,leetCode的编译器也就是能通过就行。
相关文章推荐
- leetcode 22:Generate Parentheses(15-10-9)
- 【Leetcode】【python】Generate Parentheses
- LeetCode | Generate Parentheses(生成括号)
- [LeetCode] Generate Parentheses
- Generate Parentheses--LeetCode
- [leetcode刷题系列]Generate Parentheses
- LeetCode Generate Parentheses
- LeetCode "Generate Parentheses"
- Leetcode: Generate Parentheses
- 【LeetCode-面试算法经典-Java实现】【022-Generate Parentheses(生成括号)】
- 【LeetCode】 022. Generate Parentheses
- leetcode第22题——**Generate Parentheses
- LeetCode 22 Generate Parentheses
- Generate Parentheses (括号匹配)【leetcode】
- Leetcode22 Generate Parentheses
- LeetCode 022 Generate Parentheses
- 回溯之Leetcode22 Generate Parentheses
- leetcode之Generate Parentheses
- [leetcode][回溯] Generate Parentheses
- 【LeetCode】Generate Parentheses