c语言完成代码:数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。 示例 如下:输入:n = 3,输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]
时间: 2024-11-27 08:13:01 浏览: 13
你可以使用递归的方式来解决这个问题。下面是一个简单的 C 语言函数实现,它会生成所有有效的括号组合:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 用于存放结果的动态字符串数组
char** generateParentheses(int n) {
if (n == 0) {
return (char**)malloc(1 * sizeof(char*));
}
// 动态分配存储结果的空间
int size = 1;
char** result = (char**)malloc(size * sizeof(char*));
memset(result, '\0', size * sizeof(char*));
// 生成第一个元素,空串
result[0] = (char*)malloc((1 + 2*n) * sizeof(char));
strcpy(result[0], "());
// 递归地生成其余元素
for (int i = 1; i < n; ++i) {
char* newString = (char*)malloc(((size - 1) * 2 + 2*i + 1) * sizeof(char)); // 新字符串长度计算
int j = strlen(result[i - 1]);
// 右括号添加到每个现有组合的前面
for (int k = 0; k <= j; ++k) {
strcat(newString, "))");
strcat(newString, result[i - 1]);
if (k < j) {
strcat(newString, "(");
}
}
// 将新字符串添加到结果数组
result[size++] = newString;
}
return result;
}
void printArray(char** arr, int size) {
for (int i = 0; i < size; ++i) {
printf("%s\n", arr[i]);
}
free(arr);
}
int main() {
int n = 3;
char** parentheses = generateParentheses(n);
printArray(parentheses, n);
return 0;
}
```
当你运行这个程序时,它将按照示例输出所有的有效括号组合。记得在程序结束时,通过`free()`函数释放动态内存。
阅读全文