题解 | #全排列#(c++)
全排列
http://www.nowcoder.com/practice/5632c23d0d654aecbc9315d1720421c1
根据其他题解(csyfZhang中)所改,将str[s:t]的全排列转化为以s[i]开头 s[s+1:t]的全排列
#include<algorithm>
#include<string>
using namespace std;
void pailie(string &str, int s, int t) {
if (s == t){
cout << str << endl;
return;
}
for (int i = s; i <= t; i++) {
swap(str[s], str[i]); // 交换,即分别以后面的某个字母打头
string temp = str; // 为了能换回来先存一下
sort(str.begin()+s+1, str.end()); // 为了保证题目要求的顺序
pailie(str, s + 1, t); // 将str[s:t]的全排列转化为以s[i]开头 s[s+1:t]的全排列
// 换回来,给循环中以别的字母开头的字符串用(下一个循环用)
str = temp;
}
}
int main(){
string str;
while(getline(cin, str))
pailie(str, 0, str.size()-1);
return 0;
}