您的位置:首页 > 其它

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

2016-07-23 08:32 239 查看
2016-07-13

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

public
class
Q12 {
   /**
    * 题目:打印1到最大的n位数
    * 题目说明:输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的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,则number为100)
      while(i<n){
         number *= 10;
         i++;
      }
      for(i=0;i<number;i++){
         System.out.println(i);
      }
   }
   //把问题转换成数字排列的问题,利用递归实现。
   //参数n表示的是一共有多少位
   public
void
Print1ToMaxOfNDigits_2(int n){
      //输入n
则定义一个一维n个元素的数组
      int[] array =
new int
;
      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
=i;
            PrintArray(array, n+1);
         }else {
            boolean isFirstNo0=false;//布尔变量控制第一个非0字符之前的0不打印
            for(int j=0; j<array.length; 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;
         }
      }
   }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: