题解 | #全排列#
全排列
http://www.nowcoder.com/practice/5632c23d0d654aecbc9315d1720421c1
递归:
abc的全排列 = a开头bc的全排列 + b开头ac的全排列 + c开头ab的全排列
其中,bc的全排列 = b开头c的全排列 + c开头b的全排列
以此类推......
#include<bits/stdc++.h>
using namespace std;
void fullRank(string pre, string str){
if(str.size() == 1){//递归终止条件,只剩一个字母的全排列
cout << pre + str << endl;
return ;
}
//继续递归
string nextpre = "";
string nextstr = "";
for(int i = 0; i < str.size(); i++){
nextpre = pre + str[i];
nextstr = str;
nextstr.erase(i, 1);//剔除该字母
fullRank(nextpre, nextstr);
}
}
int main(){
string str = "";
cin >> str;
/*
递归:
abc的全排列 = a开头bc的全排列 + b开头ac的全排列 + c开头ab的全排列
其中,bc的全排列 = b开头c的全排列 + c开头b的全排列
以此类推......
*/
fullRank("", str);
return 0;
}