题目
输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。
示例 1:
输入: n = 1
输出: [1,2,3,4,5,6,7,8,9]
说明:
1、用返回一个整数列表来代替打印;
2、n 为正整数。
思路
1、数字的每一位都可以由0 ~ 9的数字组成;(最高位不能为0)
2、所以我们可以使用深度优先搜索算法(DFS)来实现数字的构造;
3、深度优先搜索(DFS):可理解为朝着某个方向一直递归下去,直到最后一个节点;
4、回溯是保证StringBuilder保存的数字是正确的,为空时不需要回缩。(比如当n = 2时,如果没有回溯,则StringBuilder保存的是所有数字连接在一起的字符串,则为“12345678910111213…”,而不是单个数字“1,2,3…”)
注意
1、因为原题返回的结果为int数组,所以这里没有考虑越界的情况,直接保存在List集合中;
2、如果这里需要考虑越界的情况,可以保存在List集合中,然后再进行相应的操作。
实现
class Solution {
// 保存结果的集合
List<Integer> resultList = new ArrayList<>();
// 数位可能出现的值
char[] nums =