70.给出一个函数来输出一个字符串的所有排列。
ANSWER 简单的回溯就可以实现了。当然排列的产生也有很多种算法,去看看组合数学,
还有逆序生成排列和一些不需要递归生成排列的方法。
印象中 Knuth 的<TAOCP>第一卷里面深入讲了排列的生成。这些算法的理解需要一定的数
学功底,也需要一定的灵感,有兴趣最好看看。
同:http://blog.csdn.net/u012605629/article/details/39893073
/* 70.给出一个函数来输出一个字符串的所有排列。 ANSWER 简单的回溯就可以实现了。当然排列的产生也有很多种算法,去看看组合数学, 还有逆序生成排列和一些不需要递归生成排列的方法。 印象中 Knuth 的<TAOCP>第一卷里面深入讲了排列的生成。这些算法的理解需要一定的数 学功底,也需要一定的灵感,有兴趣最好看看。 同 53 */ #include<iostream> #include<stdio.h> using namespace std; void swap(char *a,char *b) { char t; t=*a; *a=*b; *b=t; } void printAllArray(char a[],int n,int index) { int i,j; if(index==n) { for(i=0;i<n;i++) printf("%c",a[i]); printf("\n"); return ; } for(j=index;j<n;j++) { swap(&a[index],&a[j]); printAllArray(a,n,index+1); swap(&a[index],&a[j]); } } int main() { char a[]="abcd"; char b[]="swg"; int len; //len=sizeof(a)/sizeof(char);//5 len=strlen(a); printAllArray(a,len,0);//4*3*2=24种 printf("*****************\n"); len=strlen(b); printAllArray(b,len,0);//3*2=6种 return 0; }