全排列的问题
比如有三个空位,插入0~9数字,不算上000,那么有pow(10,3)-1个数字;最常用的思路,是用整型数字直接表示,但是当空位的值过大时,如10时,那么所有的数有10的10次方个,超出整型的表示范围。
字符串来表示是一个不错的选择,这里使用递归来表示所有可能的值。先固定第一位,有10种方法,然后固定下一位,依此下去
FunRecursively(char *str,int length,int index),index表示当前要设置的位,length为总的位数
void FunRecursively(char *str,int length,int index) { //index到达总的位置时,结束 if(length==index) { Print(str); return; } for(int i=0;i<=9;i++) { str[index]='0'+i;//设置当前位,有10种可能 FunRecursively(str,length,index+1);//设置下一位 } }
//不打印前面的'0' void Print(char *str) { int nLength=strlen(str); int i; for(i=0;i<nLength;i++) { if(str[i]!='0') break; } for(i;i<nLength;i++) cout<<str[i]; cout<<" "; }