leetcode:22. Generate Parentheses
来源:互联网 发布:智慧树网络课平台登录 编辑:程序博客网 时间:2024/06/06 21:05
描述
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: vector<string> generateParenthesis(int n) { vector<string> result; string s = ""; parenthesis(n, n, s, result); return result; } void parenthesis(int left_count, int right_count,string s, vector<string>& result){ if(right_count == 0 && left_count == 0){ result.push_back(s); return; } if(left_count >0){ parenthesis(left_count-1, right_count, s+'(', result); } if(right_count > left_count){ parenthesis(left_count, right_count-1, s+')', result); } }};
结果
他山之玉
C++ O(n) solutioin
class Solution {public: vector<string> generateParenthesis(int n) { vector<string> res(1, "("); vector<int> left(1, 1); int l=2*n; for(int i=1; i<l; i++) { for(int j=res.size()-1; j>=0; j--) { if(left[j]>0) { if(left[j]<l-i) { res.emplace_back(res[j]+"("); left.push_back(left[j]+1); } res[j]+=")"; left[j]--; } else { res[j]+="("; left[j]++; } } } return res; }};
这个思路没有利用递归求,而是写了一个vector记录左括号的次数,利用循环来做,很有意思。
Java O(n) solution
public List<String> generateParenthesis(int n) { List<String> list = new ArrayList<String>(); backtrack(list, "", 0, 0, n); return list; } public void backtrack(List<String> list, String str, int open, int close, int max){ if(str.length() == max*2){ list.add(str); return; } if(open < max) backtrack(list, str+"(", open+1, close, max); if(close < open) backtrack(list, str+")", open, close+1, max); }
也是利用递归,只是编程方法而已。
python O(n) solution
def generateParenthesis(self, n): def generate(p, left, right, parens=[]): if left: generate(p + '(', left-1, right) if right > left: generate(p + ')', left, right-1) if not right: parens += p, return parens return generate('', n, n)
def generateParenthesis(self, n, left=0, right=0, cur=''): if left == n: return [cur + ')' * (n - right)] if left == right: return self.generateParenthesis(n, left + 1, right, cur + '(') return self.generateParenthesis(n, left + 1, right, cur + '(') \ + self.generateParenthesis(n, left, right + 1, cur + ')')
0 0
- [LeetCode]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
- Leetcode-22.Generate Parentheses
- [leetcode] 22. Generate Parentheses
- 22. Generate Parentheses LeetCode
- leetcode 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
- LeetCode 22. Generate Parentheses
- java集合set,list、map
- c#获取流水单号
- git 常见的命令以及开发时注意的问题
- 使用cxf开发RESTful WebService
- llvm学习笔记(1)
- leetcode:22. Generate Parentheses
- iOS 中KVC、KVO、NSNotification、delegate 区别整理
- OGDF接入
- js的正则表达式中的特殊字符
- 从无到有:七步教你做数值(1)
- LeetCode No.21 MergeTwoSortedLists
- Android 优化OTA包大小和开机启动时间
- 计算机网络面试常考题目汇总
- 从无到有:七步教你做数值(2)