Leetcode OJ: 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:
"((()))", "(()())", "(())()", "()(())", "()()()"
找出配对括号的所有组合,组合数就是卡特朗数,只是这里还要求组合,递归实现,关键是要搞清楚问题其实是每次从剩余的括号中取一个左括号或者是右括号,并保证,任何时刻,剩余的左括号要小于或等于右括号。当左右括号都无剩余时,则输出一个结果。
代码如下:
1 class Solution { 2 public: 3 void generate(int left, int right, string s, vector<string>& ret) { 4 // 左侧剩余括号比右侧剩余要多 5 if (right < left) 6 return; 7 8 // 左侧与右侧无剩余 9 if (!left && !right) { 10 ret.push_back(s); 11 return; 12 } 13 14 // 加一个左侧括号,左侧剩余括号少1个 15 if (left > 0) { 16 generate(left - 1, right, s + "(", ret); 17 } 18 // 加一个右侧括号,右侧剩余括号少1个 19 if (right > 0) { 20 generate(left, right - 1, s + ")", ret); 21 } 22 } 23 vector<string> generateParenthesis(int n) { 24 vector<string> ret; 25 generate(n, n, string(), ret); 26 return ret; 27 } 28 };