LeetCode (22)Generate Parentheses

(22)Generate Parentheses

題目:寫出所有n對“(”,“)”能組合成的符合正常規則的字符串。

例如:當n=“3”的時候,答案集爲:

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

第一個想法就是直接DFS,很簡單的搜一遍就完事了,把所有的可能放入vector裏。當然符合規則是最重要的問題,不妨考慮括號的使用情況。

對於n對括號,首先如果字符串內右括弧數量大於左括弧,那麼肯定是不對的;如果左邊的括號多於右邊的括號時,可以放入左括號也可以放入右括號;如果n對括號都用完了也就結束了,可以把字符串放入vector。

但是對於使用數量來說,更容易計算的是剩餘數量,所以代碼裏使用的lef和rig是剩餘的左括號和右括號的數量。

下面是代碼:

class Solution {
public:
    vector<string> generateParenthesis(int n) {
        vector<string> s ;
        generateVector(n,n,"",s);
        return s;
    }
    void generateVector(int lef, int rig, string str, vector<string> &s){
        if(lef > rig){
            return;
        }
        if(lef == 0 && rig == 0){
            return s.push_back(str);
        }
        else{
            if(lef > 0){
                string s1 = str;
                s1 += "(";
                generateVector(lef-1, rig, s1, s);
            }
            if(rig > 0){
                string s1 = str;
                s1 += ")";
                generateVector(lef, rig-1, s1, s);
            }
        }
    }
};
發佈了48 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章