[leetcode22] 括號生成
阿新 • • 發佈:2018-11-27
給出 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; } } };