给出n对括号,请编写一个函数来生成所有的由n对括号组成的合法组合。例如,给出n=3,解集为:"((()))", “(()())”, “(())()”, “()()()”, “()(())“数据范围:
0
≤
n
≤
10
0 le n le 10
0≤n≤10
要求:空间复杂度
O
(
n
!
)
O(n!)
O(n!),时间复杂度
O
(
n
!
)
O(n!)
O(n!)
示例1
输入:1
返回值:[”()”]
示例2
输入:2
返回值:["(())","()()"]
题目的要求为当输入n对括号后,输出所有由n对括号组成的合法组合,这就意味着,当“(”出现的时候,后序必须要有与之配对的“)存在。首先定义i和j的值均为n,之后有如下五种情况:
第一种:当n=0或i=j=0时,说明不需要分配括号,直接存放s并返回;
第二种:当i=0,j>0时,此时无左括号,所以直接添加j个右括号。
第三种:当i>0,j=0时,此时无右括号,但此时不符合括号的合法使用,这种情况不存在。
第四种:当i
class Solution {
public:
void generation(vector& str,int i,int j,string s){
if(i==0&&j==0){//当n==0,或者i==j==0时,说明不需要分配括号,直接存放s并返回;
str.push_back(s);
return;
}
if(i==0&&j>0){//当i==0和j>0时,需要添加j个右括号
while(j>0){
j--;
s+=')';
}
generation(str,i,j,s);
return;
}
if(i=j){//当i的值大于等于j时,进行“(”的添加。
generation(str,i-1,j,s+'(');
return;
}
}
vector generateParenthesis(int n) {
// write code here
vector str;
string s="";
generation(str,n,n,s);
return str;
}
};



