题意:
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<string>& 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<string> generateParenthesis(int n) { 22 vector<string> result; 23 if (n == 0) { 24 return result; 25 } 26 string s; 27 dfs(result,s,2*n,0); 28 return result; 29 } 30 };