分为递归法、循环法
#include <iostream>
#include <string.h>using namespace std;
void swap(char * a, char * b) {
char temp = * a;
*a = *b;
*b = temp;
}
void swapArea(char * a, char *b) {
while( a < b)
swap(a++,b--);
}
bool CanSwap(char * str, int start, int end) {
for(int i = start; i <end; ++i) {
if((*(str+i)) == *(str+end))
return false;
}
return true;
}
void AllRange(char *str, int start, int end) {
if( start == end) {
cout <<str<<"\t";
} else {
for( int i = start; i <= end; ++i) {
if(CanSwap(str,start,i)) {
swap(str+start, str+i);
AllRange(str, start+1, end);
swap(str+start , str + i);
}
}
}
}
bool hasNextPermutation(char *str) {
char * pEnd = str +strlen(str);
if(str == pEnd)
return false;
char *p, *q, *m;
pEnd --;
p = pEnd;
while( p != str) {
q= p;
p--;
if( *p < *q) {
m= pEnd;
while( *m <= *p)
m--;
swap(m,p);
swapArea(m,pEnd);
return true;
}
}
swapArea(q,pEnd);
return false;
}
void Permutation(char str[])
{
if(str != NULL)
{
cout<<str<<endl;
while(hasNextPermutation(str))
{
cout<<str<<endl;
}
}
}
int main() {
cout << "Hello world!" << endl;
char str[] = {"1224"};
AllRange(str,0,strlen(str)-1);
cout<<endl<<"____________________"<<endl;
char test[]={"223"};
Permutation(test);
return 0;
}