LeetCode 22. Generate Parentheses

Posted 皇家大鹏鹏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 22. Generate Parentheses相关的知识,希望对你有一定的参考价值。

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:

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

 

这道题是典型的回溯法的应用,使用递归写代码并不难,但是关键还是需要理解流程,回溯法是指数的复杂度,因此测试用例中的数字应该不会太大

类似的题目有Valid ParenthesesLongest Valid Parentheses

 1 class Solution {
 2 public:
 3     //left 和 right 分别表示可以用来放置的左括号和右括号
 4     vector<string> generateParenthesis(int n) {
 5         vector<string> res;
 6         generateParenthesis(n, n, "", res);
 7         return res;
 8     }
 9     void generateParenthesis(int left, int right, string out, vector<string> &res)
10     {
11         if (left > right)
12             return;
13         if (left == 0 && right == 0)
14             res.push_back(out);
15         else
16         {
17             if (left > 0)
18                 generateParenthesis(left - 1, right, out + "(", res);
19             if (right > 0)  //注意这里的if 不可以换成else与上一个if搭配,因为这里并不是非此即彼的关系
20                 generateParenthesis(left, right - 1, out + ")", res);
21         }
22             
23     }
24 };

 

以上是关于LeetCode 22. Generate Parentheses的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 22. Generate Parentheses

leetcode22. Generate Parentheses

leetcode 22 -- Generate Parentheses

[leetcode-22-Generate Parentheses]

LeetCode 22. Generate Parentheses

LeetCode 22. Generate Parentheses