题目:
输入一个字符串,打印出该字符串中字符的所有排列。
例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
思路:
把一个字符串看成两部分组成:第一部分为第一个字符,第二部分为后面的所有字符。
求整个字符串的排列,可以看出两步:首先求所有可能出现在第一个位置的字符,即把第一个字符和后面的所有字符交换;然后固定第一个字符,求后面所有字符的排序。此时仍把后面的字符看成两部分,第一个字符和后面的字符,然后重复上述步骤。(递归)
#include<iostream>
#include<stdlib.h>
#include<vector>
using namespace std;
void Permutation(char* str,char* begin)
{
if(*begin=='\0')
printf("%s\n",str);
else
{
for(char* ch=begin;*ch!='\0';ch++)
{
char temp=*ch;
*ch=*begin;
*begin=temp;
Permutation(str,begin+1);
temp=*ch;
*ch=*begin;
*begin=temp;
}
}
}
void Permutationstr(char* str)
{
if(str==NULL)
return;
Permutation(str,str);
}
int main()
{
char str[4]="abc";
Permutationstr(str);
system("pause");
return 0;
}