C语言 | Leetcode C语言题解之第22题括号生成

题目:

题解:

cpp 复制代码
// 回溯法求解
#define MAX_SIZE 1430  // 卡特兰数: 1, 1, 2, 5, 14, 42, 132, 429, 1430
void generate(int left, int right, int n, char *str, int index, char **result, int *returnSize) {
    if (index == 2 * n) { // 当前长度已达2n
        result[(*returnSize)] =  (char*)calloc((2 * n + 1), sizeof(char));
        strcpy(result[(*returnSize)++], str);
        return;
    }
    // 如果左括号数量不大于 n,可以放一个左括号
    if (left < n) {
        str[index] = '(';
        generate(left + 1, right, n, str, index + 1, result, returnSize);
    }
    // 如果右括号数量小于左括号的数量,可以放一个右括号
    if (right < left) {
        str[index] = ')';
        generate(left, right + 1, n, str, index + 1, result, returnSize);
    }
}
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
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;
    generate(0, 0, n, str, 0, result, returnSize);
    return result;
}
相关推荐
到底怎么取名字不会重复5 分钟前
Day10——LeetCode15&560
c++·算法·leetcode·哈希算法·散列表
chuxinweihui39 分钟前
数据结构——二叉树,堆
c语言·开发语言·数据结构·学习·算法·链表
周而复始 否极泰来1 小时前
深入浅出学会函数(上)
c语言·学习
看到我,请让我去学习1 小时前
C语言基础(day0424)
c语言·开发语言·数据结构
数据分析螺丝钉1 小时前
LeetCode 252 会议室 III(Meeting Rooms III)题解与模拟面试
算法·leetcode·职场和发展
猫猫头有亿点炸1 小时前
C语言斐波拉契数列2.0
c语言·开发语言·算法
努力写代码的熊大2 小时前
c语言中文件操作详解
c语言·开发语言
明月醉窗台2 小时前
Qt 入门 6 之布局管理
c语言·开发语言·c++·qt
YuforiaCode3 小时前
第十四届蓝桥杯 2023 C/C++组 冶炼金属
c语言·c++·蓝桥杯
愚润求学4 小时前
【专题刷题】二分查找(一):深度解刨二分思想和二分模板
开发语言·c++·笔记·leetcode·刷题