22. Generate Parentheses【力扣】

题意理解

给定n对括号,输出所有的合法的括号序列,先左括号后右括号

问题分析

回溯法

其他

怎么想的到?

链接

    vector generateParenthesis(int n) {
        vector results;
        backtrack(results, "", 0, 0, n);
        return results;
    }
//results是最终结果,cur是部分解,open是左括号数量,close是右括号数量,n是括号对数量
    void backtrack(vector& results, string cur, int open, int close, int n)
    {
        if (cur.size() == 2 * n) //cur长度够了
        {
            results.push_back(cur);    //追加结果
            return;    //返回
        }
        
        if (open < n)    //先左括号
        {
            backtrack(results, cur + "(", open + 1, close, n);    //部分解增加,左括号增加
        }
        
        if (close < open)    //再右括号
        {
            backtrack(results, cur + ")", open, close + 1, n);    //部分解增加,右括号增加
        }
    }

 

你可能感兴趣的:(算法,工作刷题,回溯法)