Q12:打印1到最大的n位数

2016-07-13

Q12:打印1到最大的n位数

public class Q12 {

   /**

    * 题目:打印1到最大的n位数

    * 题目说明:输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出123一直到最大的3位数即999.

    */

   public static void main(String[] args) {

      // TODOAuto-generated method stub

      Q12 test = new Q12();

      //test.Print1ToMaxOfNDigits_1(2);

      test.Print1ToMaxOfNDigits_2(4);

   }

   //最基本的解法,存在越界溢出现象,不稳定。

   public void Print1ToMaxOfNDigits_1(int n){

      int number = 1;

      int i = 0;

      //用来控制第n+1位的最小数(例如,输入n=2,number100

      while(i

         number *= 10;

         i++;

      }

      for(i=0;i

         System.out.println(i);

      }

   }

   //把问题转换成数字排列的问题,利用递归实现。

   //参数n表示的是一共有多少位

   public void Print1ToMaxOfNDigits_2(int n){

      //输入n 则定义一个一维n个元素的数组

      int[] array = new int[n];

      if(n<0)

         return;

      PrintArray(array,0);//此处为0时,是从1打印到n位最大数,如果是1则打印n-1位最大数,如果是2则打印n-2为最大数。

      //排序从第0位开始

   }

   private void PrintArray(int[] array, int n){

      //每一位上的数字都是从0-9的一个全排列

      for(int i=0; i<10; i++){

         if(n!=array.length){

            array[n]=i;

            PrintArray(array, n+1);

         }else {

            boolean isFirstNo0=false;//布尔变量控制第一个非0字符之前的0不打印

            for(int j=0; jlength; j++){

                if(array[j]!=0){

                   System.out.print(array[j]);

                   if(!isFirstNo0)

                      isFirstNo0=true;

                }else {

                   if(isFirstNo0)

                      System.out.println(array[j]);

                }

            }

            System.out.println();

            return;

         }

      }

   }

}

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