1、题目描述
输入一个字符串,输出这个字符串的所有排列组合。比如输入:abc,输出:abc acb bac bca cba cab。
2、解题思路
我们可以把一个字符串看成由两部分组成,第一部分是它的第一个字符串,第二部分是后面的字符串。我们求整个字符串的排列可以看成两步。第一步求所有可能出现在第一个位置的字符,即把第一个字符和后面所有的字符交换。第二部固定第一个字符,求后面所有字符的排列。这时候我们仍然把后面的所有字符分成两个部分:后面字符的第一个字符,以及这个字符之后的所有字符。然后把第一个字符逐一和后面的字符交换。代码如下:
#include<iostream>
#include<vector>
using namespace std;
void swap(char* str1, char* str2) {
char temp = *str1;
*str1 = *str2;
*str2 = temp;
}
//求一个字符串的全排列
void permutation(char* str,char* begin) {
if (*begin == '\0')
cout << str<<" ";
else {
for (char* temp = begin; *temp != '\0'; temp++) {
swap(temp, begin);
permutation(str,begin + 1);
swap(temp, begin);
}
}
}