以下是C语言的实现代码:
#include <stdio.h>
#include <string.h>
void generateParenthesis(int n, int left, int right, char *s, int *pos) {
if (left == n && right == n) { // 达到括号平衡且生成完所有括号,输出序列
printf("%s\n", s);
return;
}
if (left < n) { // 还可以添加左括号
s[*pos] = '('; // 添加左括号
generateParenthesis(n, left + 1, right, s, pos + 1); // 递归生成剩余括号序列
}
if (right < left) { // 添加右括号的前提是右括号数量小于左括号数量
s[*pos] = ')'; // 添加右括号
generateParenthesis(n, left, right + 1, s, pos + 1); // 递归生成剩余括号序列
}
}
int main() {
int n;
scanf("%d", &n);
char s[40]; // 存储生成的括号序列,长度为2n,因为最多有n个左括号和n个右括号,中间需要加一个结束符'\0'
memset(s, 0, sizeof(s)); // 初始化序列为全零字符(方便后续判断是否已经访问过)
generateParenthesis(n, 0, 0, s, 0); // 从空序列开始生成长度为n的合法括号序列
return 0;
}