【C语言】【Leetcode】【递归】22. 括号生成

文章目录


题目

链接: https://leetcode.cn/problems/generate-parentheses/description/

思路

我们可以通过回溯递归算法求解

如果左括号数量不大于n,我们可以放一个左括号。

如果右括号数量小于左括号的数量,我们可以放一个右括号。

str 来记录每一个元素

对于递归我们可以利用这样一个方法函数 generate

我们可以粗略地把这个过程理解为下图

然后我们时不断在右边添加左括号或右括号的,所以在调用 generate 时需要借用一个索引 index


代码实现

需要注意的是下面代码中元素 str 创建时用的是 calloc 并且还多创建了一个空间原因是在赋值给 result 时用的是 strcpy 它是以尾部地0判断结束的,而 calloc 中的每一个元素都为0,

如果要用 malloc 必须手动在末尾添加上一个0来做结束

也可以改变读取方式,不用 strcpy ,用循环赋值的方法也是一样的

csharp 复制代码
void generate(int left, int right, int n, char* str, int index, char** result,
              int* returnSize) {
    if (index == 2 * n) {
        result[(*returnSize)] = (char*)calloc((2 * n + 1), sizeof(char));
        strcpy(result[(*returnSize)++], str);
        return;
    }
    // 最多放n个左括号,如果左括号数量不大于 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*) * 1430); // n最大为8时的元素个数
    *returnSize = 0;
    generate(0, 0, n, str, 0, result, returnSize);
    return result;
}
相关推荐
专注VB编程开发20年1 分钟前
delphi死嗑Pascal冷门编程语言,Borland不认可 “通用多语言 IDE”,认为 “专有语言才是护城河”
开发语言·ide·delphi
hzxpaipai2 分钟前
外贸网站制作:为何派迪科技做的网站性能与打开速度如此不错?
开发语言·前端·网络·科技·安全
于先生吖2 分钟前
高并发稳定运营,JAVA 动漫短剧小程序 + H5 源码
java·开发语言·小程序
青桔柠薯片3 分钟前
I²C 总线协议学习总结:从开漏逻辑到读写事务的工程视角
c语言·开发语言·学习
生信研究猿12 分钟前
leetcode 101.对称二叉树(不会做)
算法·leetcode·职场和发展
2401_8274999913 分钟前
python核心语法04-函数
开发语言·python
重生之我是Java开发战士13 分钟前
【笔试强训】Week1:点击消除,数组中两个字符串的最小距离,dd爱框框,腐烂的苹果,大数乘法
java·开发语言·算法
独特的螺狮粉13 分钟前
开源鸿蒙跨平台Flutter开发:地震震源探测系统-地震波形与波干涉渲染架构
开发语言·flutter·华为·架构·开源·harmonyos
牧瀬クリスだ19 分钟前
优先级队列——堆
java·开发语言·数据结构
样例过了就是过了24 分钟前
LeetCode热题100 跳跃游戏 II
c++·算法·leetcode·贪心算法·动态规划