#include <stdio.h>
void select(char* str, int len, char* result, int start, int curr, int dest)
{
if (curr == dest) puts(result);
else
{
int i;
for (i = start; len - i >= dest-curr ; ++i)
{//len - i >= dest-curr就是说主串还剩下的可以选取的字符应该大于等于你还需要的字符数
result[curr] = str[i];
//递归的刷新把问题递归的变小。比如1 2 3 4 要知道1的组合,我只要知道2 3 4 的组合,要知道2 3 4 的我只要知道3 4 的
select(str, len, result, i+1, curr+1, dest);
}
}
}
int main()
{
char *source = "ABCDE";
char result[8] = {0};
select(source, 5, result, 0, 0, 3);
return 0;
}
组合问题(从M个不同字符中任取N个字符的所有组合)
最新推荐文章于 2024-05-05 22:00:15 发布