*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:

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

代碼:

class Solution {
public:
    vector<string> generateParenthesis(int n) {
        vector<string> res;
        dfs(0,0,n,"",res);
        return res;
    }
    void dfs(int lNum, int rNum, int pNum, string pS, vector<string>& res){
        if(lNum == pNum && rNum == pNum){
            res.push_back(pS);
            return;
        }
        if(lNum < pNum) dfs(lNum + 1, rNum, pNum, pS + "(", res);
        if(rNum < lNum) dfs(lNum, rNum + 1, pNum, pS + ")", res);
    }
};

這個題一直擱置了很久才做,原因是沒有思路。哎,還是算法掌握的不夠牢啊。很簡單的dfs算法。頭結點是左括號,從頭結點開始往下dfs搜索。如果當前左括號個數未滿,則可以加左括號,如果當前右括號的個數小於左括號的個數,則可以加右括號。知道左括號加滿,右括號也加滿爲止,得到一個有效括號串。感覺還是自己把條件想的嚴格了。

靜心盡力!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章