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

这道题在面试环节时,基本都要考察大数情况的。

由于本题要求返回 int 类型数组,相当于默认所有数字都在 int32 整型取值范围内,因此不考虑大数越界问题。

实际上,本题的主要考点是大数越界情况下的打印。需要解决以下三个问题:

根据以上方法,可初步编写全排列代码:

在此方法下,各数字字符串被逗号隔开,共同组成长字符串。返回的数字集字符串如下所示:

观察可知,当前的生成方法仍有以下问题:

令其成为“dfs(xn) = 生成长度为 n 的数字字符串,当前正在确定下标为 x 的那一位”,这样可以将不同位长的数值全排列拆分出来。

原先的 dfs(3) 要将 1~3 位的数值全排列全部计算出来,改造后将会拆分为 dfs(01)+dfs(02)+dfs(03)。

通过上述两个步骤,即可解决上述的两个问题。

为 正确表示大数 ,以下代码的返回值为数字字符串集拼接而成的长字符串。

本题要求输出 int 类型数组。为 运行通过 ,可在添加数字字符串 s 前,将其转化为 int 类型。代码如下所示: