输出字符串的全排列

2018-10-08  本文已影响0人  小码弟

输出字符串的所有组合

这题适合使用递归,固定一个字符,求余下子字符串的全排列
以'abc'为例:
1、 固定第一个字符'a',对余下子串'bc'求全排列
2、将'a'与第二个字符'b'交换,然后固定此时的第一个字符'b',对余下子串'ac'求全排列
3、由于2步打乱了源字符串的顺序,先交换'a'<--> 'b',再把'a'与第三个字符'c'交换后,固定这时的第一个字符'c', 求余下子串'ba'的全排列


未命名文件.png
/*
  @参数:
  Str: 待排序的字符串
  SubStr:待排序的余下子串
*/
void Permutation(char* Str, char* SubStr)
{
  if(Str == NULL || SubStr == NULL)
    return;
  if(*SubStr == '\0')
  // 一次排列完成,输出结果
  print("%s", Str)
  else{
  for(char* p=SubStr; *p != '\0'; p++)
  {
    // 交换SubStr和当前遍历到的p
    swap(SubStr, p);
    // 固定第一个字符,对余下子串求全排列
    Permutation(Str, SubStr+1);
    // 还原
    swap(SubStr, p);
  }
}
}

//调用
str='abc';
Permutation(str, str);
上一篇下一篇

猜你喜欢

热点阅读