字符串的排列 【微软面试100题 第五十三题】

题目要求:

  输入一个字符串,打印出该字符串中字符的所有排列。

  例如输入字符串abc,则输出字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab、cba。

  参考资料:剑指offer第28题。

题目分析:

  1. 输出的字符串必须包含原字符串的所有字符,只是字符顺序换了;

  2. 考虑有字符重复的情况;

  3. 思路是:

    1) 分别把第一个字符和后面的字符交换;

    2) 固定第一个字符,求后面字符的排列;

    3) 把第二个字符和后面的字符交换,然后固定.......

代码实现:

#include <iostream>

using namespace std;

void PrintAllPermutation(char *pStr);

int main(void)
{
    char pStr[] = "aaab";
    PrintAllPermutation(pStr);
    return 0;
}
void PrintAllPermutation(char *pStr,char *pStart)
{
    int flag = 0;
    if(*pStart=='