递归实现,需要注意以下几点:
1. 递归终止条件
2. 递归递推关系式
这里实际上是一个排列问题,只是排列需要满足条件在每一次递归调用时左括号数不能少于右括号数。
还有一点需要特别注意,当推出递归调用时相应的变量要替换掉旧的值,相当于一个出栈的过程。
#include<stdlib.h>
#define N 20
char* output[N];
int sum = 0;
int findAllCombines(int left, int right, int index, char* output){
int i = 0;
if(left < right || left > N /2 || right > N / 2 ){
return;
}
if(left == N /2 && right == N /2 && index == N){
for(; i < N; i++){
printf("%c ",output[i]);
}
sum++;
printf("\n");
return;
}
output[index] = '(';
findAllCombines(++left, right, ++index, output);
left--;
index--;
output[index] = ')';
findAllCombines(left, ++right, ++index, output);
right--;
index--;
}
int main(){
findAllCombines(0,0,0,output);
printf("All combinations: %d", sum);
getchar();
}
本文介绍了一种使用递归方法解决括号匹配问题的算法,并提供了详细的代码实现过程。该算法确保任何时候左括号的数量都不低于右括号的数量。
355

被折叠的 条评论
为什么被折叠?



