//全排列
#include<stdio.h>
#include<iostream>
#include<stdlib.h>
#include<string.h>
using namespace std;
void Permutation(int from ,int to);
void swap(int &a,int &b);
char str[]="1234";
int size=sizeof(str)/sizeof(char);
int main()
{
Permutation(0,size-2);
return 0;
}
void Permutation(int from ,int to)
{
if(from==to)
{
for(int i=0;i<=to;i++)
cout<<str[i];
cout<<'\n';
return ;
}
//思想就是1,2,3,4,分别做头,剩下的使用递归继续进行全排列
for(int i=from;i<=to;i++)
{
swap(str[i],str[from]);
Permutation(from+1,to);
swap(str[from],str[i]);
}
}
void swap(int &a,int &b)
{
int temp=a;
a=b;
b=temp;
}
若全排列中有重复的字符出现,i与j交换时,应判断[i,j)中有没有与第j个相等的,有的话,跳过j