Leetcode 22. Generate Parentheses

Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

For example, given n = 3, a solution set is:

[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]

分析

生成括號對,只需要用遞歸的方法即可。最大的數(shù)組大小可以采用int較大的數(shù)值。

/**
 * Return an array of size *returnSize.
 * Note: The returned array must be malloced, assume caller calls free().
 */

void generate(char**ans,int*returnSize,int n,int left,int right,char *temp,int length)
{
    //printf("%d %d %d %s\n",left,right,length,temp);
    if(length==2*n)
    {
        temp[length]='\0';
        //printf("%d %s\n",*returnSize,temp);
        ans[(*returnSize)]=(char*)malloc(sizeof(char)*(2*n+1));
        for(int i=0;i<length;i++)
            ans[*returnSize][i]=temp[i];
        ans[(*returnSize)][length]='\0';
        *returnSize=*returnSize+1;
        return;
    }
    if(left<n)
    {
        temp[length]='(';
        length++;
        left++;
        generate(ans,returnSize,n,left,right,temp,length);
        length--;
        left--;
    }
    if(left>right)
    {
        temp[length]=')';
        length++;
        right++;
        generate(ans,returnSize,n,left,right,temp,length);
        length--;
        right--;
    }
    return;
}
char** generateParenthesis(int n, int* returnSize) {
    int max=1000000;
    //for(int i=2;i<=3*n;i++)
    //    max=max*i;
    char **ans=(char**)malloc(sizeof(char*)*max);
    char*temp=(char*)malloc(sizeof(char)*(2*n+1));
    *returnSize=0;
    generate(ans,returnSize,n,0,0,temp,0);
    return ans;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容