2020-5-3 10:00签到
今天还是三道easy,一道medium;
22. 括号生成
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
虽然 题解是正确的,但递归超出栈空间大小了,即,小n可以解决,大n无法解决,这个该怎么办。
void dfs(int left,int right,int n,int index,char *a,char **ans,char *returnSize)
{
if(left<n)
{
a[index]='(';
dfs(left+1,right,n,index+1,a,ans,returnSize);
}
if(right<n&&right<left)
{
a[index]=')';
dfs(left,right+1,n,index+1,a,ans,returnSize);
}
if(left==n&&right==n)
{
a[index]='\0';
ans[*returnSize]=(char *)malloc(sizeof(char)*(2*n+1));
strcpy(ans[*returnSize],a);
(*returnSize)++;
return ;
}
}
char ** generateParenthesis(int n, int* returnSize){
char **ans=(char **)malloc(sizeof(char *)*1500);
*returnSize=0;
char *a=(char *)malloc(sizeof(char)*(2*n+1));
dfs(0,0,n,0,a,ans,returnSize);
return ans;
}
网友评论