2020-05-03 第二十三天

2020-05-04  本文已影响0人  三土垚6

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;
}
上一篇 下一篇

猜你喜欢

热点阅读