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;
}
相关推荐
范纹杉想快点毕业32 分钟前
以项目的方式学QT开发(一)——超详细讲解(120000多字详细讲解,涵盖qt大量知识)逐步更新!
c语言·数据结构·c++·git·qt·链表·github
黑色的山岗在沉睡1 小时前
LeetCode100.4 移动零
数据结构·算法·leetcode
xueyinan1 小时前
小刚说C语言刷题—1088求两个数M和N的最大公约数
c语言
_Itachi__1 小时前
LeetCode 热题 100 114. 二叉树展开为链表
linux·leetcode·链表
全栈凯哥2 小时前
Java详解LeetCode 热题 100(17):LeetCode 41. 缺失的第一个正数(First Missing Positive)详解
java·算法·leetcode
王RuaRua3 小时前
[数据结构]7. 堆-Heap
c语言·数据结构·算法·链表
MoonBit月兔4 小时前
插件双更新:LeetCode 刷题支持正式上线,JetBrains IDE 插件持续升级!
ide·算法·leetcode
似水এ᭄往昔5 小时前
【数据结构】——队列
c语言·数据结构·c++·链表
水水沝淼㵘5 小时前
嵌入式开发学习日志(数据结构--双链表)Day21
c语言·数据结构·学习·算法·排序算法
czxyvX6 小时前
023-C语言预处理详解
c语言