码迷,mamicode.com
首页 > 其他好文 > 详细

《剑指offer》第三十八题(字符串的排列)

时间:2019-03-09 15:27:00      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:一个   pst   pch   图片   argv   排列   递归   nbsp   bsp   

// 面试题38:字符串的排列
// 题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,
// 则打印出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。

#include <iostream>

void Permutation(char* pStr, char* pBegin);

void Permutation(char* pStr)
{
    if (pStr == nullptr)
        return;

    Permutation(pStr, pStr);
}

void Permutation(char* pStr, char* pBegin)
{
    if (*pBegin == \0)
    {
        printf("%s\n", pStr);
    }
    else
    {
        for (char* pCh = pBegin; *pCh != \0; ++pCh)
        {
            char temp = *pCh;//先看有多少个可能的排头,为每个排头做递归处理
            *pCh = *pBegin;
            *pBegin = temp;

            Permutation(pStr, pBegin + 1);

            temp = *pCh;//还得交换回来
            *pCh = *pBegin;
            *pBegin = temp;
        }
    }
}

// ====================测试代码====================
void Test(char* pStr)
{
    if (pStr == nullptr)
        printf("Test for nullptr begins:\n");
    else
        printf("Test for %s begins:\n", pStr);

    Permutation(pStr);

    printf("\n");
}

int main(int argc, char* argv[])
{
    Test(nullptr);

    char string1[] = "";
    Test(string1);

    char string2[] = "a";
    Test(string2);

    char string3[] = "ab";
    Test(string3);

    char string4[] = "abc";
    Test(string4);
    system("pause");
    return 0;
}

技术图片

技术图片

技术图片

技术图片

 

《剑指offer》第三十八题(字符串的排列)

标签:一个   pst   pch   图片   argv   排列   递归   nbsp   bsp   

原文地址:https://www.cnblogs.com/CJT-blog/p/10500922.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!