【刷题剑指offer】字符串的排列

来源:互联网 发布:三星note8网络信号差 编辑:程序博客网 时间:2024/06/19 06:18

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

思路:递归实现。分为两步:1、首先求出所有可能出现在第一个位置的字符,即把第一个字符和后面所有字符交换。

2、固定第一个字符,求后面所有字符的排列。

那么后面的字符也可以分为两部分,第一个字符和后面的所有字符,我们重复1、2步骤,所以这是一个递归过程

void Permutation(char*pStr){if (pStr == NULL)return;Permutation(pStr, pStr);}void Permutation(char*pStr, char*pBegin){if (pBegin == '\0')return 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;}}}


原创粉丝点击