参考了网上的http://blog.csdn.net/peasking_dd/article/details/6342984
写了个java版的:
public class Print_1_To_NDigit {
/**
* Q65.输入数字n,按顺序输出从1最大的n位10进制数。比如输入3,则输出1、2、3一直到最大的3位数即999
* 1.使用字符串存放数字。int a=123 --> char[] a={'1','2','3'};
* 2.递归。设置好第n位(最高位,对应char数组的第0个元素)后,接下来设置第n-1,n-2.....位
* 3.打印时候,前面的0不输出,见printNumber(char[] number)
*/
public static void main(String[] args) {
int n=3;
Print_1_To_NDigit p=new Print_1_To_NDigit ();
p.print(n);
}
public void print(int n){
char[] result=new char[n];
printHelpRecursive(result,n,0);
}
//from result[0] to result[n-1],set 0-9 into it
public void printHelpRecursive(char[] result,int length,int index){
if(index==length){
printNumber(result);
}else{
for(int i=0;i<=9;i++){
result[index]=(char)('0'+i);
printHelpRecursive(result,length,index+1);
}
}
}
//don't print the prefix '0'.e.g,when "0012",print "12"
public void printNumber(char[] re){
int len=re.length;
boolean canPrint=false;
for(int i=0;i<len-1;i++){
if(!canPrint&&re[i]!='0'){
canPrint=true;
}
if(canPrint){
System.out.print(re[i]);
}
}
System.out.println(re[len-1]);//the last bit is always printed.
}
}