17. 打印从1到最大的n位数

  • Post author:
  • Post category:其他




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

输入数字

n

,按顺序打印出从

1

到最大的

n

位十进制数。比如输入

3

,则打印出

1、2、3

一直到最大的

3

位数

999


示例 1:


输入:

n = 1


输出:

[1,2,3,4,5,6,7,8,9]


说明:

  • 用返回一个整数列表来代替打印

  • n

    为正整数



解题思路

题目要求打印 “从

1

至最大的

n

位数的列表” ,因此需考虑以下两个问题:

最大的

n

位数(记为

end

)和位数

n

的关系: 例如最大的

1

位数是

9

,最大的

2

位数是

99

,最大的

3

位数是

999

。则可推出公式:





e

n

d

=

1

0

n

1

end = 10^n – 1






e


n


d




=








1



0










n




















1






大数越界问题:



n

较大时,

end

会超出

int

整型的取值范围,超出取值范围的数字无法正常存储。但由于本题要求返回

int

类型数组,相当于默认所有数字都在

int

整型取值范围内,因此不考虑大数越界问题。

故只需定义区间



[

1

,

1

0

n

1

]

[1, 10^n – 1]






[


1


,




1



0










n




















1


]





和步长

1

,通过

for

循环生成结果列表

res

并返回即可。



Java代码

class Solution {
    public int[] printNumbers(int n) {
        int end = (int)Math.pow(10,n) - 1;
        int[] res = new int[end];
        for(int i = 0;i < res.length; i++){
            res[i] = i + 1;
        }
        return res;
    }
}

在这里插入图片描述



版权声明:本文为YouMing_Li原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。