前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >剑指offer-打印从 1 到最大的 n 位数

剑指offer-打印从 1 到最大的 n 位数

作者头像
小土豆Yuki
发布2021-10-14 16:52:43
7900
发布2021-10-14 16:52:43
举报
文章被收录于专栏:洁癖是一只狗洁癖是一只狗

题目

输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数即 999。

代码语言:javascript
复制
输入: n = 1
输出: [1,2,3,4,5,6,7,8,9]

解题思路(一)

  1. 找到最大数number的值,计算公10的n次方-1;
  2. 直接遍历循环number;
代码语言:javascript
复制
private  void   printMaxNumer(int n){
        int maxValue =(int) Math.pow(10, n) - 1;
        for (int i = 1; i <= maxValue; i++) {
            System.out.print(i);
            System.out.println();
        }
}

这种方式虽然很简单,但是他没有办法处理数值大的数,比如n>10之后,int就会溢出。

解题思路(二)

基于上面思路,这次可以使用字符串形式打印从1到最大n位数

  1. 我们发现n位数的每一位数其实就是0~9的全排列
  2. 递归条件就是我迭代到最低位就是个位,这个时候就应该输出数字
  3. 如果我们未满n位的数字前面补0,在打印的时候,前面的0不要打印出来

上图是简单的基本思路,边看代码边看图,有助于理解代码,完整代码如下

代码语言:javascript
复制
public class Soultion {

    public void printToMaxofNDigits(int n){
        if(n<=0){
            return;
        }
        char[] number = new char[n];
        printToMaxofNDigits(number,0);
    }

    private void printToMaxofNDigits(char[] number, int digit) {
        //终止条件
        if (digit == number.length) {
            printNumer(number);
            return;
        }
       //循环每一位数中可能的数字[0-9]
        for (int i = 0; i < 10; i++) {
             //此时digit=0即百位,number[0]=0
            number[digit] = (char) (i + '0');
            //进入下一层是个位,因此 digit要+1 
            printToMaxofNDigits(number, digit + 1);
        }
    }
     //这里主要的打印以及防止打印出前面的0,如[0,0,1] ,打印1就行
    private void printNumer(char[] number) {
        int index = 0;
        while (index < number.length && number[index] == '0') {
            index++;
        }
        while (index < number.length) {
            System.out.print(number[index++]);
        }
        System.out.println();
    }
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-09-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 洁癖是一只狗 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档