Leetcode - 022. Generate Parentheses

weixin_33807284發表於2018-07-31

原題地址

我的思路:
1.需要所有的可行解,隸屬dfs + backtraing 的大類
2.每次當前狀態可能的下行狀態有兩種可能性:
2.1 能否補上'(',補上'('的條件是xl < n
2.2 能否補上')',補上')'的條件是xl < xr

class Solution {
public:
    
    void dfs(vector<string> &vct,string & cur,int xl,int n)
    {
        int xr = cur.length() - xl;
        if(xl + xr == n * 2)
        {
            vct.push_back(cur);
            return;
        }
        if(xl < n)
        {
            cur += '(';
            dfs(vct,cur,xl + 1,n);
            cur = cur.substr(0,cur.length() - 1);
        }
        // 這裡需要注意的是:只有')'數小於'('數的時候才能補上')'
        if(xr < xl)
        {
            cur += ')';
            dfs(vct,cur,xl,n);
            cur = cur.substr(0,cur.length() - 1);
        }
    }
    
    vector<string> generateParenthesis(int n) {
        vector<string> vct;
        if(n <= 0)
            return vct;
        string cur;
        dfs(vct,cur,0,n);
        return vct;
    }
};

相關文章