1. 程式人生 > >[leetcode22] 括號生成

[leetcode22] 括號生成

給出 n 代表生成括號的對數,請你寫出一個函式,使其能夠生成所有可能的並且有效的括號組合。

這道題最初打算用最死板的方法去做,但是寫的過程中發現複雜度太高而且很繁瑣。然後參考了一下別人遞迴的思路很快就寫出來了。

python:

class Solution:
    def generateParenthesis(self, n):
        """
        :type n: int
        :rtype: List[str]
        """
        res = []
        self.add("", res, n, n)
        return res
    def add(self, string, res, l, r):
        if l > r:
            return
        if l > 0:
            self.add(string + '(', res, l - 1, r)
        if r > 0:
            self.add(string + ')', res, l, r - 1)
        if l == 0 and r == 0:
            res.append(string)
            return

C++: 

C++剛開始用值傳遞的時候一直返回空列表,除錯了一下初步確定是因為值傳遞的原因就換成了地址傳遞。估計原因是值傳遞在返回時銷燬了變數res,所以才會出現這種情況。

class Solution {
public:
    vector<string> generateParenthesis(int n) {
        vector<string> res;
        add("", &res, n, n);
        return res;
    }
    void add(string s, vector<string>* res, int l, int r){
        if(l > r) return;
        if(l > 0) add(s + "(", res, l - 1, r);
        if(r > 0) add(s + ")", res, l, r - 1);
        if(l == 0 && r == 0){
            (*res).push_back(s);
            return;
        }
    }
};