22. 括号生成

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

示例 1:

输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]

示例 2:

输入:n = 1
输出:["()"]

提示:

  • 1 <= n <= 8

 

bool isRight(vector &str)
{

    stackstkRight;
    for (int i = 0; i     {
        if (stkRight.size() == 0 && str[i] == ')')
        {
            return false;
        }
        if (str[i] == ')' && stkRight.size()>0)
        {
            stkRight.pop();
            continue;
        }
        if (str[i] == '(')
        {
            stkRight.push(str[i]);
            continue;
        }
    }
    if (stkRight.size() == 0)
    {
        return true;
    }
    return false;
}

vector>ret;
vectortarVec = { '(',')' };
void dfs(vector&vec, int cur, int n)
{
    if (cur == 2 * n )
    {
        ret.push_back(vec);
        return;
    }
    for (int i = 0; i     {
        vec.push_back(tarVec[i]);
        dfs(vec, cur + 1, n);
        vec.pop_back();
    }
}

vector generateParenthesis(int n) {
    vector ret2;
    vectorvec;
    dfs(vec, 0, n);
    for (int i = 0; i     {
        if (isRight(ret[i]))
        {
            string str = "";
            for (int j = 0; j             {
                str += ret[i][j];
            }
            ret2.push_back(str);
        }
    }

    return ret2;

}
 

你可能感兴趣的:(javascript,开发语言,ecmascript)