码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode: Generate Parentheses

时间:2014-12-05 22:39:10      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   ar   color   sp   for   on   div   

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:

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

分析:这里介绍两种方法,一种是递归构造法,另一种是dfs。

1. 递归法

这种方法简单明了,但要理解是如何构造的,n对有效括号对,可以通过i(0=< i <= n-1)对有效括号对inner和n-1-i对有效括号对outer构造,"("+inner+")"+outer, 且无重复。

class Solution {
public:
    vector<string> generateParenthesis(int n) {
        if(n == 0) return vector<string>(1,"");
        if(n == 1) return vector<string>(1,"()");
        vector<string> result;
        
        for(int i = 0; i < n; i++){
            for(auto inner : generateParenthesis(i))
                for(auto outer : generateParenthesis(n-1-i))
                    result.push_back("("+ inner + ")" + outer);
        }
        return result;
    }
};

2. 还可以用dfs求解,在生成的过程中始终保证"("的个数大于等于")"的个数。

class Solution {
public:
    vector<string> generateParenthesis(int n) {
    vector<string> result;
    if (n > 0) generate(n, "", 0, 0, result);
    return result;
    }
    
    void generate(int n, string s, int l, int r, vector<string> &result) {
        if (l == n) {
            result.push_back(s.append(n - r, )));
            return;
        }
        generate(n, s + (, l + 1, r, result);
        if (l > r) generate(n, s + ")", l, r + 1, result);
    }
};

 

Leetcode: Generate Parentheses

标签:style   blog   io   ar   color   sp   for   on   div   

原文地址:http://www.cnblogs.com/Kai-Xing/p/4147511.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!