Leetcode - 022. Generate Parentheses

原题地址

我的思路:
1.需要所有的可行解,隶属dfs + backtraing 的大类
2.每次当前状态可能的下行状态有两种可能性:
2.1 能否补上'(',补上'('的条件是xl < n
2.2 能否补上')',补上')'的条件是xl < xr

class Solution {
public:
    
    void dfs(vector &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 generateParenthesis(int n) {
        vector vct;
        if(n <= 0)
            return vct;
        string cur;
        dfs(vct,cur,0,n);
        return vct;
    }
};

你可能感兴趣的:(c++,leetcode,dfs,backtracking)