回溯法,其实就是i<j 和 i>=j这两个在回溯,其他那几个都是为了完成剩余的任务。

class Solution {
public:
    /**
     * 
     * @param n int整型 
     * @return string字符串vector
     */
    vector<string> generateParenthesis(int n) {
        // write code here
        vector<string> result;


        string s="";// 保存括号,每次的括号组
        parenthesis(result,n,n,s);

        return result;
    }

    void parenthesis(vector<string>& result,int i, int j, string s){
         //第一种:当n为0时,也就是i = j = 0,这时,说明不需要分配括号,直接返回字符串类型即可。
        if(i==0&&j==0){
            result.push_back(s);
            return;
        }

        if(i==0&&j>0){
            parenthesis(result,i,j-1,s+")");

        }else if(j==0&&i>0){
            parenthesis(result,i-1,j,s+"(");

        }else if(i<j){
            parenthesis(result,i-1,j,s+"(");
            parenthesis(result,i,j-1,s+")");

        }else if(i>=j){
            parenthesis(result,i-1,j,s+"(");

        }
    }
};