第二週LeetCode算法題

題目名稱:Generate Parentheses

題目難度:Medium

題目描述: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:

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

題目分析:
題目的意思就是找出所有合法的對應於輸入數的括號匹配形式。最直接想到的就是窮舉法。寫出一個遞歸函數,他有4個參數,第一個是結果的引用,用於每出一個結果之後的實時記錄;第二個是記錄當前還剩多少個左括號可以加;第三個是記錄當前還剩多少個右括號可以加;第四個是當前正在拼接的字符串。
遞歸函數開始先檢查是否滿足終止條件:即待添加的左右括號數是否爲0。如果都沒有待添加的,則是終止情況。如果還有待添加的,分別檢查是否有待添加的左右括號。能添加左括號的條件是待添加的左括號數>0,能添加右括號數的條件是待添加的右括號數>0並且已添加的左括號數多於右括號數。

最後AC的代碼如下:

class Solution {
public:
    void nextOne(vector<string> & result, int left, int right, string current) {
  if (right == 0 && left == 0) {
      result.push_back(current);
      return;
  }
  if (left > 0) {
    nextOne(result, left-1, right, current+"(");
  }
  if (right > left) {
    nextOne(result, left, right-1, current+")");
  }
}

    vector<string> generateParenthesis(int n) {
      int left = n, right = n;
      vector<string> result;
      nextOne(result, left, right, "");
      return result;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章