1. 程式人生 > >LeetCode 22. Generate Parentheses

LeetCode 22. Generate Parentheses

需要 ret 16px pub valid bin amp 流程 des

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 Parentheses

Longest 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