题⽬描述

输⼊数字 n,按顺序打印出从 1 到最⼤的 n 位⼗进制数。⽐如输⼊ 3,则打印出 1 、2 、3⼀直到最⼤的 3 位数 999 。

  1. ⽤返回⼀个整数列表来代替打印

  2. n 为正整数

示例1 输⼊:1 返回值:[1,2,3,4,5,6,7,8,9]

思路及解答

直接计算

不太清楚这道题是要考察什么(苦笑),⼏乎都是⼀个循环能解决的事情,仔细想了⼀下,也并没有想到其他⽐较令⼈⽿⽬⼀新的做法,⽤Math.pow(10, n) - 1 取出最⼤的边界条件

  • 时间复杂度:O(10ⁿ),需要生成10ⁿ-1个数字

  • 空间复杂度:O(10ⁿ),需要存储所有数字

当n≥10时,10ⁿ-1会超过int范围,导致溢出

字符串模拟

针对大数问题,使用字符串来模拟数字的生成。

  • 时间复杂度:O(n×10ⁿ)

  • 空间复杂度:O(n×10ⁿ)

优化版本:

递归回溯

利用递归生成所有可能的数字组合。

  • 时间复杂度:O(10ⁿ)

  • 空间复杂度:O(n) - 递归栈深度