22. 括号生成 回溯算法-递归树

在这里插入图片描述

本次题解思路参考来源如下:
作者:dingjinyang
链接: link.
来源:力扣(LeetCode)
在这里插入图片描述

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
#define MAX_SIZE 1430

void huisu(int left,int right,int n,char *str,int index,char **result,int *returnSize) {
    if(left == n && right == n) {//左右括号都已经用完
       result[(*returnSize)] = (char *)calloc((2 * n + 1), sizeof(char));
       strcpy(result[(*returnSize)++],str); //把找到的一个结果放入结果二维数组中
       return;
    }

    if(left < n) { //当左括号还没用完时才执行
       str[index] = '(';
       huisu(left+1,right,n,str,index+1,result,returnSize); //继续探索左括号
    }
    if(right < n && right < left) { //左括号必须大于右括号,并且右括号没有用完
       str[index] = ')';
       huisu(left,right+1,n,str,index+1,result,returnSize); //继续探索右括号
    }
}


char ** generateParenthesis(int n, int* returnSize){
   char *str = (char *)calloc((2 * n + 1), sizeof(char));
   char **result = (char **)malloc(sizeof(char *)*MAX_SIZE); //二维数组存放每一组结果

   *returnSize = 0; //合题意的结果数量
   huisu(0,0,n,str,0,result,returnSize);
   return result;
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值