全排列的问题

  比如有三个空位,插入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<<" ";
}

  

posted on 2012-10-08 21:16  CodeAnt  阅读(147)  评论(0编辑  收藏  举报