用C++写一个数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
时间: 2024-05-03 15:21:32 浏览: 21
思路:
1. 递归生成所有可能的括号组合。
2. 在递归过程中,需要记录左括号和右括号的数量,只有在左括号数量小于等于 n 且右括号数量小于等于左括号数量时,才能添加左括号或右括号。
3. 当左括号和右括号数量都为 n 时,将当前组合添加到结果数组中。
代码实现:
```c
void generate(int left, int right, int n, char* str, int index, char** result, int* returnSize) {
if (left == n && right == n) { // 左右括号数量都为 n,将当前组合添加到结果数组中
result[*returnSize] = (char*)malloc(sizeof(char) * (2 * n + 1)); // +1 是为了存储字符串结尾符 '\0'
strcpy(result[*returnSize], str);
(*returnSize)++;
return;
}
if (left <= n) { // 左括号数量小于等于 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);
}
}
char** generateParenthesis(int n, int* returnSize) {
char** result = (char**)malloc(sizeof(char*) * 10000); // 假设最多生成 10000 个括号组合
char* str = (char*)malloc(sizeof(char) * (2 * n + 1)); // +1 是为了存储字符串结尾符 '\0'
*returnSize = 0;
generate(0, 0, n, str, 0, result, returnSize);
return result;
}
```
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pptx](https://img-home.csdnimg.cn/images/20210720083543.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)