week7-leetcode #22-GenerateParentheses

来源:互联网 发布:怎样在家开淘宝网店 编辑:程序博客网 时间:2024/06/14 00:17

week7-leetcode #22-GenerateParentheses

题目地址: https://leetcode.com/problems/generate-parentheses/description/

Question

Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

Example

given n = 3, a solution set is:[  "((()))",  "(()())",  "(())()",  "()(())",  "()()()"]

Solution

class Solution {public:  vector<string> generateParenthesis(int n) {    vector<string> vec_out;    recursiveParenthesis(n, n, "", vec_out);    return vec_out;  }  void recursiveParenthesis(int left, int right, string out, vector<string> &vec_out) {    // 如果右边括号过多,直接返回    if (left > right) return;    if (left == 0 && right == 0)      vec_out.push_back(out);    if (left > 0)      recursiveParenthesis(left-1, right, out+"(", vec_out);    if (right > 0)      recursiveParenthesis(left, right-1, out+")", vec_out);  }};

思路

考虑使用递归算法。

(1)如果剩余左边的括号大于有右边的括号,说明右边的括号多于左边的括号,无法进行匹配。

(2)如果剩余左右括号为0,说明括号达到了要求的数量,停止递归。

(3)如果左边或者右边剩余的括号大于0,递归生成左括号或右括号。