7、排列组合
先封装一个函数:
void Permutations(char* num, const int Findex, const int Lindex) // Findex/Lindex = 开始下标/结束下标
{
/// 假设又有一个 char num = "abc";
// a开头,后面是bc的所有排列
swap(p[0], p[0]); // a和a自己进行交换 1
Permutations(p, 1, 2); // 递归调用自己 2
swap(p[0], p[0]); // 再换回来,换回abc 3
// b开头,后面是ac的所有排列
swap(p[0], p[1]) // a和b交换位置, 就成了b开头 bac 1
Permutations(p, 1, 2); // 递归调用自己 2
swap(p[0], p[1]); // 再交换回来,换回abc 3
// c开头,后面是ab的所有排列
swap(p[0], p[2]); // a和c交换位置,就成了c开头 cab 1
Permutations(p, 1, 2); // 递归调用自己 2
swap(p[0], p[2]); // 再换回来,换回abc 3
}
这样写可以帮助理解工作原理。理解了之后,可以发现重复步骤较多,可以升级成一个for循环:
void Permutations(char* num, const int Findex, const int Lindex) // Findex/Lindex = 开始下标/结束下标
{ // 结束条件
if (Findex == Lindex)
{
//结束了就把最后的结果打印