c语言实现括号生成问题:给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出n = 3,生成结果为:["((()))", "(()())", "(())()", "()(())", "()()()"]。
时间: 2024-03-09 16:46:23 浏览: 120
C实现的带括号表达式运算
5星 · 资源好评率100%
好的,这是一个经典的回溯算法问题。以下是 C 语言的实现代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void generate(int left, int right, char* str, int idx, char** res, int* returnSize) {
if (left == 0 && right == 0) {
res[*returnSize] = (char*)malloc(sizeof(char) * (idx + 1));
strcpy(res[*returnSize], str);
(*returnSize)++;
return;
}
if (left > 0) {
str[idx] = '(';
generate(left - 1, right, str, idx + 1, res, returnSize);
}
if (right > left) {
str[idx] = ')';
generate(left, right - 1, str, idx + 1, res, returnSize);
}
}
char** generateParenthesis(int n, int* returnSize) {
char** res = (char**)malloc(sizeof(char*) * 10000);
char* str = (char*)malloc(sizeof(char) * (2 * n + 1));
memset(str, 0, sizeof(char) * (2 * n + 1));
*returnSize = 0;
generate(n, n, str, 0, res, returnSize);
return res;
}
int main() {
int n = 3;
int returnSize;
char** res = generateParenthesis(n, &returnSize);
for (int i = 0; i < returnSize; i++) {
printf("%s ", res[i]);
}
return 0;
}
```
该算法的时间复杂度为 $O(4^n/\sqrt{n})$,空间复杂度为 $O(4^n/\sqrt{n})$,其中 $n$ 为括号对数。
阅读全文