首页 > 其他 > 详细

Leetcode OJ: Generate Parentheses

时间:2014-04-04 03:58:02      阅读:466      评论:0      收藏:0      [点我收藏+]

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:

"((()))", "(()())", "(())()", "()(())", "()()()"

找出配对括号的所有组合,组合数就是卡特朗数,只是这里还要求组合,递归实现,关键是要搞清楚问题其实是每次从剩余的括号中取一个左括号或者是右括号,并保证,任何时刻,剩余的左括号要小于或等于右括号。当左右括号都无剩余时,则输出一个结果。

代码如下:

bubuko.com,布布扣
 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 };
bubuko.com,布布扣

 

 

Leetcode OJ: Generate Parentheses,布布扣,bubuko.com

Leetcode OJ: Generate Parentheses

原文:http://www.cnblogs.com/flowerkzj/p/3643305.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!