题意:
iven n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
For example, given n = 3, a solution set is: (Medium)
[ "((()))", "(()())", "(())()", "()(())", "()()()"]
分析:
生成满足数量要求的所以可能的匹配的括号。实际就是一道回溯或者深搜题。
当左括号还没有达到数量的时候,可以添加左括号;当右括号比左括号数量少的时候可以添加右括号;
搜索所有情况即可。有了昨天的17题练习过之后,这个回溯写的就比较顺手了。
代码:
1 class Solution { 2 void dfs(vector& v, string& s, int n,int left) { 3 if (s.size() == n) { 4 v.push_back(s); 5 return; 6 } 7 int right = s.size() - left; 8 if (left < n / 2) { 9 s.push_back('(');10 dfs(v,s,n,left+1);11 s.pop_back();12 } 13 if (right < left) {14 s.push_back(')');15 dfs(v,s,n,left);16 s.pop_back();17 }18 return;19 }20 public:21 vector generateParenthesis(int n) {22 vector result;23 if (n == 0) {24 return result;25 }26 string s;27 dfs(result,s,2*n,0);28 return result;29 }30 };