从str中选 m 个数的所有排列算法
// 从str中选 m 个数的所有排列算法
void perm(string str,int a,int b,int m){
// 字符数达到 m 个进行输出
if(a==m){
for(int i=0;i<m;i++){
cout<<str[i];
}
cout<<endl;
}
// 这一句删除,避免每次递归都多出一步判断
// if(a==b){
// return;
// }
for(int k=a;k<=b;k++){
swap(str[k],str[a]);
perm(str,a+1,b,m);
// 去掉这一句排列出来的才是有序的,否则会出现无序
// swap(str[k],str[a]);
}
}
int main(){
string str;
int m;
// 输入的字符各不相同,且从小到大有序
cin>>str>>m;
perm(str,0,str.size()-1,m);
}