1. 程式人生 > 其它 >leetcode22 括號生成(dfs回溯)

leetcode22 括號生成(dfs回溯)

連結:https://leetcode-cn.com/problems/generate-parentheses/

題目

數字 n代表生成括號的對數,請你設計一個函式,用於能夠生成所有可能的並且 有效的 括號組合。

有效括號組合需滿足:左括號必須以正確的順序閉合。

用例

示例 1:

輸入:n = 3
輸出:["((()))","(()())","(())()","()(())","()()()"]
示例 2:

輸入:n = 1
輸出:["()"]

提示:

1 <= n <= 8

思路

因為只有一種型別括號
只要最後生成n個左括號和n個右括號即可
在構造當前序列過程中 當left<n時說明還可以插左括號
當left>right時說明可以插右括號

class Solution {
public:
    vector<string> generateParenthesis(int n) {
        string cur;
        backtrak(cur,0,0,n);
        return ans;
    }
private:
    vector<string>ans;
    void backtrak(string cur,int left,int right,int n){
        if(cur.size()==n*2){
            ans.push_back(cur);
            return;
        }
        if(left<n){
            cur.push_back('(');
            backtrak(cur,left+1,right,n);
            cur.pop_back();
        }
        if(right<left){//對於每個位置只需要保證左括號大於右括號數量
            cur.push_back(')');
            backtrak(cur,left,right+1,n);
            cur.pop_back();
        }
    }
};