解法一:全排列过程
void printnum(char number[],int n)
{
bool begining = true;
int num = 0;
for(int i=0;i<n;i++)
{
if(begining && number[i]!='0') begining = false;
else if(begining && number[i]=='0') num++;
if(!begining) cout<<number[i];
}
if(num!=n)cout<<endl;
}
void printOneToMaxDigitsRecursively(char number[],int length,int i)
{
if(i==length-1)
{
printnum(number,length);
return;
}
for(int j=0;j<10;j++)
{
number[i+1] = '0'+j;
printOneToMaxDigitsRecursively(number,length,i+1);
}
}
void printOneToMaxDigits(int n)
{
if(n<=0) return;
char number[n+1];
number[n]='\0';
for(int i=0;i<10;i++)
{
number[0] = '0' + i;
printOneToMaxDigitsRecursively(number,n,0);
}
}
解法二:模拟加法
void printnum(char number[],int n)
{
bool begining = true;
int num = 0;
for(int i=0;i<n;i++)
{
if(begining && number[i]!='0') begining = false;
else if(begining && number[i]=='0') num++;
if(!begining) cout<<number[i];
}
if(num!=n)cout<<endl;
}
bool increment(char number[],int n)
{
bool isOverFlow = false;
int nTakeOver = 0;
for(int i=n-1;i>=0;i--)
{
int num = 0;
if(i==n-1)num = number[i] -'0' +1;
else num = number[i] -'0' + nTakeOver;
if(num>=10)
{
num -=10;
nTakeOver = 1;
number[i] = '0'+num;
if(i==0) isOverFlow = true;
}
else
{
number[i] = '0'+num;
break;
}
}
return isOverFlow;
}
void printOneToMaxDigits(int n)
{
if(n<=0) return;
char number[n+1];
memset(number,'0',n);
number[n]='\0';
while(!increment(number,n))
{
printnum(number,n);
}
}