leetcode 括號生成 中等

 

 

遞歸生成括號。有兩個關鍵參數 lCnt,rCnt 分別表示已生成的左括號和有括號的數量。spa

因此一共分出四種狀況:code

① lCnt == n && rCnt == n,將生成的括號放入 vector<string> ans 中blog

② lCnt == n && rCnt < n,只能生成右括號遞歸

③ lCnt == rCnt,只能生成左括號string

④ 生成左括號或者有括號均可io

class Solution {
public:
    vector<string> generateParenthesis(int n) {
        string s;
        solve(s, 0, 0, n);
        return ans;
    }

    void solve(string &s, int lCnt, int rCnt, const int &n) {  // lCnt: 左括號的數目, rCnt: 有括號的數目
        if(lCnt == n && rCnt == n) {
            ans.emplace_back(s);
            return ;
        }
        if(lCnt == rCnt) {      // 左右括號數目同樣, 只能放左括號
            s.push_back('(');
            solve(s, lCnt + 1, rCnt, n);
            s.pop_back();
        } else if(lCnt == n) {  // 左括號滿了, 只能放右括號
            s.push_back(')');
            solve(s, lCnt, rCnt + 1, n);
            s.pop_back();
        } else {    // 均可以放
            s.push_back('(');
            solve(s, lCnt + 1, rCnt, n);
            s.pop_back();
            s.push_back(')');
            solve(s, lCnt, rCnt + 1, n);
            s.pop_back();
        }
    }

    vector<string> ans;
};
相關文章
相關標籤/搜索