1. 题目描述
输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。
示例 1:
输入: n = 1
输出: [1,2,3,4,5,6,7,8,9]
说明:
用返回一个整数列表来代替打印
n 为正整数
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/da-yin-cong-1dao-zui-da-de-nwei-shu-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 题解
1、大数排列问题
用递归方法生成数字的字符串形式,然后转为数字,我这里偷懒直接用了库函数parseInt将字符串"002"这种的直接转为了合法数字。这种方法按道理可以应对大数越界这种问题的。
/**
* @param {number} n
* @return {number[]}
*/
var printNumbers = function(n) {
let chars = ['0','1','2','3','4','5','6','7','8','9'];
let res = [];
let num = [];
dfs(0);
res.shift(); //去掉第一个元素0
return res;
//递归生成数字
function dfs(x){
if(x == n){
// join方法,数组转字符串
let tempNum = num.join("");
// 字符串转数字
tempNum = parseInt(tempNum);
res.push(tempNum);
return;
}
for(let val of chars){
num[x] = val;
dfs(x+1);
}
}
};
2、我的提交
题目考察点可能是如何用排列的方式生成这些数字。因为题目最后返回的是int类型的数组,所以默认不用考虑大数越界问题。
/**
* @param {number} n
* @return {number[]}
*/
var printNumbers = function(n) {
let res = [];
for(let i = 1; i < Math.pow(10, n); i++){
res.push(i);
}
return res;
};