leetcode-22. 括号生成

 

 

class Solution {
public:
    vector<string> res;
    vector<string> generateParenthesis(int n) {
        if(n==0)
            return res;
        back("", n, n);
        return res;
    }

    void back(string str, int m, int n){
        if(m==0&&n==0){
            cout<<"str:"<<str<<endl;
            res.push_back(str);
            return;
        }
        cout<<"m_n: "<<m<<" "<<n<<endl;
        if(m>n) // 如果剩余左括号大于右括号肯定无法匹配
            return;
        // 如果剩余左扩号等于右括号,肯定先添加左括号
        // 如果剩余左扩号小于右括号,添加左括号和右括号都可以
        /*
        if(m==n)
            back(str+"(", m-1, n);
        else if(m<n)
            back(str+"(", m-1, n);
            back(str+")", m, n-1);
        */
        // 所以代码合并以后为:
        if(m>0)
            back(str+"(", m-1, n);
        if(n>0)
            back(str+")", m, n-1);

    }
};

 

posted @ 2021-07-15 16:51  三一一一317  阅读(43)  评论(0)    收藏  举报