22. 括号生成

发布时间:2024年01月04日

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= n <= 8

?

bool isRight(vector<char> &str)
{

?? ?stack<char>stkRight;
?? ?for (int i = 0; i<str.size(); 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<vector<char>>ret;
vector<char>tarVec = { '(',')' };
void dfs(vector<char>&vec, int cur, int n)
{
?? ?if (cur == 2 * n )
?? ?{
?? ??? ?ret.push_back(vec);
?? ??? ?return;
?? ?}
?? ?for (int i = 0; i<tarVec.size(); i++)
?? ?{
?? ??? ?vec.push_back(tarVec[i]);
?? ??? ?dfs(vec, cur + 1, n);
?? ??? ?vec.pop_back();
?? ?}
}

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

?? ?return ret2;

}
?

文章来源:https://blog.csdn.net/yinhua405/article/details/135376941
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。