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

Leetcode: Generate Parentheses

时间:2015-04-13 20:54:32      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:leetcode

题目:
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:

“((()))”, “(()())”, “(())()”, “()(())”, “()()()”

思路分析:
最后的组合结果总有这样的规律:左括号的个数大于等于右括号的个数。所以,按照这个规律:假设在位置k剩余left个左括号和right个右括号,如果left>0,可以直接打印左括号。,如果left<right且right!=0,则可以打印右括号。如果left和right均为零,则说明已经完成一个合法排列,可以将其打印出来。

C++参考代码:

class Solution
{
private:
    void generateSub(vector<string> &result, string current, int left, int right)
    {
        if (left == 0 && right == 0) result.push_back(current);
        else
        {
            if (left != 0) generateSub(result, current + ‘(‘, left - 1, right);
            if (left < right && right != 0) generateSub(result, current + ‘)‘, left, right - 1);
        }
    }

public:
    vector<string> generateParenthesis(int n)
    {
        vector<string> result;
        if (n > 0) generateSub(result, string(), n, n);
        return result;
    }
};

C#参考代码:

public class Solution
{
    private void GenerateSubString(IList<string> result, string current, int left, int right)
    {
        String value = current;
        if (left == 0 && right == 0) result.Add(value);
        else
        {

            if (left != 0) GenerateSubString(result, current + ‘(‘, left - 1, right);
            if (left < right && right != 0) GenerateSubString(result, current + ‘)‘, left, right - 1);
        }
    }

    public IList<string> GenerateParenthesis(int n)
    {
        IList<string> result = new List<string>();
        if (n > 0) GenerateSubString(result, "", n, n);
        return result;
    }
}

Leetcode: Generate Parentheses

标签:leetcode

原文地址:http://blog.csdn.net/theonegis/article/details/45031489

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