【leetcode】22. 括号生成

  • void recursion(char** arr,char* s,int cur,int cnt,int num,int n,int* returnSize){
        if (cur == n*2){
            arr[(*returnSize)] = (char*)calloc(n*2 + 1, sizeof(char));
            strcat(arr[(*returnSize)++], s);
            return;
        }
        for (int i = 0; i < 2; i++){
            if(num==0 && i==1 || num==n && i==0 || cnt==n && i==0 || cnt==0 && i==1) 
                continue;        
            s[cur] = (i)?')' :'(';
            recursion(arr, s, cur+1, (i)?cnt-1 :cnt+1, (i==0)?num+1 :num, n, returnSize);
            s[cur] = '';
        }
    }
    char ** generateParenthesis(int n, int* returnSize){    
        *returnSize = 0;
        char** arr = (char**)calloc(10000, sizeof(char*));
        char* s = (char*)calloc(n*2+1, sizeof(char));
        if (n==0) return NULL;
        recursion(arr,s, 0, 0, 0, n,returnSize);
        return arr;
    }
原文地址:https://www.cnblogs.com/ganxiang/p/14102244.html