美文网首页
输出字符串的全排列

输出字符串的全排列

作者: 小码弟 | 来源:发表于2018-10-08 19:10 被阅读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);
    

    相关文章

      网友评论

          本文标题:输出字符串的全排列

          本文链接:https://www.haomeiwen.com/subject/wyijaftx.html