剑指offer17 依次打印从1到最大的n位数
这是一道不错的题。可惜牛客网上没有找到。
依次打印,又存在大数问题,所以问题分为两部分:解决大数的表示和加1,解决大数的打印(前置0)。
代码见剑指offerp117附近。
但是这样代码量其实是比较大的。
所以还有思路二:
对每个数位递归调用,每位都是0~9。
代码大概如下。
class Solution{ public void print1ToMaxofNDigits(int n){ if(n<1) return; int[] nums2print = new int[n]; int index = 0; for(int i=0;i<10;i++){ nums2print[0]=i; printRecursively(n,0,nums2print); } } private void printRecursively(int n,int index,int[] nums2print){ if(index==n-1) {printNum(nums2print);return;} for(int i=0;i<10;i++){ nums2print[index+1]=i; printRecursively(n,index+1,nums2print); } } private void printNum(int[] nums2print){ boolean isBegin = false; for(int i=0;i<nums2print.length;i++){ if(nums2print[i]!=0&&!isBegin) isBegin=true; if(isBegin){ System.out.printf("%d",nums2print[i]); } } } }
当然用java.math.BigInteger和java.math.BigDecimal也是可以的,不过肯定不符合面试要求而且肯定会问这俩类内部是咋实现的/笑哭,所以不如乖乖用string转换。

浙公网安备 33010602011771号