打印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<number.length;i++){
             if( isBeginning0&&number[i]!='0'){
                     isBeginning0=false;
             }
             if(!isBeginning0){
                    System.out.println(number[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<length;i++){
                if(isBeginning0&&number[i]!='0')
                           isBeginning=false;
                if(!isBeginning0){
                           System.out.println(number[i]);
                }
          }
          
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容