(算法分析Week11)Generate Parentheses[Medium]

来源:互联网 发布:ug10钻孔编程 编辑:程序博客网 时间:2024/05/07 18:34

22.Generate Parentheses

题目来源

Description

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:

[  "((()))",  "(()())",  "(())()",  "()(())",  "()()()"]

给定一个非负整数n,生成n对括号的所有合法排列。

Solution

有点类似长度为n的不重复数组的所有合法入栈出栈次序。若要合法(匹配),则第1到2n个位置都满足如下规则:左括号的个数大于等于右括号的个数。当剩余left > 0,可以直接打印左括号,不会出错;若left >= right,我们不能打印右括号;当left和right都为0,说明一个合法序列已经生成。
利用递归解决。

Complexity analysis

略。

Code

class Solution {public:    vector<string> generateParenthesis(int n) {        vector<string> result;        string temp = "";        int left = n;        int right = n;        generate(left, right, temp, result);        return result;    }    void generate(int left, int right, string res, vector<string> &result) {        if (left == 0 && right == 0) {            result.push_back(res);        }        if (left > 0) {            generate(left - 1, right, res+'(', result);        }        if (left < right && right > 0) {            generate(left, right-1, res+')', result);        }    }};

Result

这里写图片描述

原创粉丝点击