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;
}
相关推荐
busideyang27 分钟前
STC8H单片机delay_ms函数闪烁不准?原因是参数溢出!
c语言·单片机·嵌入式硬件·嵌入式
灰色小旋风31 分钟前
力扣19删除链表的倒数第N个结点(C++)
c++·算法·leetcode·链表
DREW_Smile1 小时前
数据在内存中的存储
c语言·开发语言
是翔仔呐1 小时前
第10章 模拟量采集基础:外置ADC/DAC芯片驱动(PCF8591/ADC0832)
c语言·开发语言·单片机·嵌入式硬件·51单片机
Rabitebla1 小时前
[特殊字符] TopK问题全解析(TomGo复习版|讲人话 + 原理打穿)
c语言·数据结构·算法·链表
weixin_649555671 小时前
C语言程序设计第四版(何钦铭、颜晖)第十一章 指针进阶之随机发牌
c语言·开发语言
淮北也生橘121 小时前
Linux应用开发:C标库中的操作字符串函数简单总结
linux·运维·c语言
keep intensify2 小时前
最小路径和
算法·leetcode·职场和发展
爱编码的小八嘎2 小时前
C语言完美演绎5-4
c语言
多打代码2 小时前
2026.03.23 最长递增子序列 & 最长连续递增序列 & 最长公共子序列
算法·leetcode·职场和发展