题⽬描述
输⼊数字 n ,按顺序打印出从 1 到最⼤的 n 位⼗进制数。⽐如输⼊ 3 ,则打印出 1 、2 、3⼀直到最⼤的 3 位数 999 。
示例1
输⼊:1
返回值:[1,2,3,4,5,6,7,8,9]
思路及解答
直接计算
不太清楚这道题是要考察什么(苦笑),⼏乎都是⼀个循环能解决的事情,仔细想了⼀下,也并没有想到其他⽐较令⼈⽿⽬⼀新的做法,⽤Math.pow(10, n) - 1 取出最⼤的边界条件- public class Solution {
- public int[] printNumbers(int n) {
- double len = Math.pow(10, n) - 1;
- int[] result = new int[(int) len];
- for (int i = 0; i < len; i++) {
- result[i] = i + 1;
- }
- return result;
- }
- }
复制代码
- 时间复杂度:O(10ⁿ),需要生成10ⁿ-1个数字
- 空间复杂度:O(10ⁿ),需要存储所有数字
当n≥10时,10ⁿ-1会超过int范围,导致溢出
字符串模拟
针对大数问题,使用字符串来模拟数字的生成。
[code]import java.util.ArrayList;import java.util.List;public class Solution { public int[] printNumbers(int n) { if (n |