打印1到最大的n位数

思路:

因为是大数,所以只能用数组或者字符串操作;因为需要判断打印到n个9为止,不需要每次判断,只需要在最高位产生进位的时候判断。
方法一:直接操作

   public class solution{
   ------------------------------------------------
             用字符数组处理
        public void Print1ToMaxOfNDigits(int n){
         if(n<0)
              return;
         char[] number=new char[n+1];
         if(!Increment(number)){
             PrintNum(number);
          }
        }
  ------------------------------------------------
        加1操作,从低位开始+1+carry,如果小于10,直接加1后break;
        如果大于10,则改位为+sum-10的值,置carry=1;如果最高位的值大于10,则说明溢出了,停止打印。
        public  boolean Increment(char[] number){
            boolean isOverflow=false;
            int carry=0;
            int length=number.length;
        //int sum=1;
            for(int length-1;i>=0;i--){
                int sum=number[i]-'0'+carry;
                if(i==length-1)
                     sum++;
                if(sum>=10){
                     if(i==0)
                      { 
                        isOverflow=true;
                      } else{
                         sum-=sum;
                         carry=1;
                         number[i]=sum+'0';
                     }   
                }else {
                         number[i]=sum+'0';
                         break;
                }   
        }
    }
  ------------------------------------------------
   打印数字,需要处理始位为0的情况。
    public void printNum(char[] number){
       boolean isBeginning0=true;
       for(int i=0;i

方法二:递归法

 public void Print1ToMaxOfNDigits(int n){
        if(n<0)
             return;
        char* [] number=new char[n+1];
        char[n]='\0'
        for(int i=0;i<10;i++){
               number[0]=i+'0';
               helper(0,n,number);
        }
 }
void helper(int index,int length,char* [] number){
      if(index==length-1){
            PrintNum(number)
            return;//递归结束;
       }
       for(int i=0;i<10;i++){
           number[index+1]=i+'0';
           helper(index+1,length,number);
       }
}
 public void printNum(char[] number){
          boolean isBeginning0=true;
          int length=number.length;
          for(int i=0;i

你可能感兴趣的:(打印1到最大的n位数)