剑指offer_打印从 1 到最大的 n 位数
题目描述
输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数即 999。
首先最容易想到的方法是
1 public static void show(int n){ 2 int max = (int) (Math.pow(10, n)-1); 3 for (int i = 0; i <= max; i++) { 4 System.out.println(i); 5 } 6 }
但这样遇到n是特别大的时候会溢出
于是也可以用大数类改造一下
1 public static void show(int n){ 2 BigDecimal m =new BigDecimal(1); 3 BigDecimal dig =new BigDecimal(10); 4 BigDecimal pow = dig.pow(n).subtract(m); 5 for (BigDecimal i = m; i.compareTo(pow)<1; i=i.add(m)) { 6 System.out.println(i); 7 } 8 }
另外,可以用 char 数组进行存储。 使用回溯法得到所有的数。
1 public void show(int n){ 2 if(n < 0) return; 3 char [] number = new char [n]; 4 show(number,0); 5 } 6 7 public void show(char[] number , int digit){ 8 if(digit == number.length) {printshow(number); return;} 9 for(int i=0; i<10; i++){ 10 number[digit]=(char)(i+'0'); 11 show(number,digit+1); 12 } 13 } 14 public void printshow(char[] number){ 15 BigDecimal big =new BigDecimal(String.valueOf(number)); 16 System.out.println(big); 17 }
一个位数一个位数的打印,10次循环每一次递归打印下一位

浙公网安备 33010602011771号