每周一题:打印从1到最大的n位数(更新JS)

题目:

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

示例 1:

输入: n = 1
输出: [1,2,3,4,5,6,7,8,9]

 

代码:

var printNumbers = function(n) {
let res = [];
let max = Math.pow(10,n)-1;
for(let i=1;i<=max;i++){
res.push(i);
}
return res;
};

 

通过率:

 

思路:

这道题,最主要是要找出最大的那个数字,方便我们做循环输出结果。由于没有很好的方法,我最终选择了用JavaScript里面自带的函数方法,即Math.pow(x,y)函数,x为底数,y为幂数,返回结果为x 的 y 次幂。而由题目中给出的例子可以看出,这个打印数组序列是不包含n 位十进制数的,所以我们在后面还需要减去一,才能得到循环终止的条件(当然,不减去这个一也是可以的,只是需要我们对建立循环的条件进行更改,将原本循环次数可以等于最大值这一判定条件除去,只剩下小于最大值即可)。最后写出循环,由push()方法将其放入我们建立好的空数组中去,最后输出这个数组。

提交后可以看见执行用时和内存消耗仅为中游,可以得出还有很多改进的地方。比如循环语句能不能用更简洁的代码语句代替?还有没有别的办法去求这个最大的n位十进制数?我在力扣题解上找到了另一种解题方式。

代码:

var printNumbers = function(n) {
    let len = Math.pow(10, n)-1;
    return Array.from({length: len}, (item, index) => index+1);
};
通过率:
——————
其实看起来和我的代码半斤八两,但内存消耗上要比我处理的好很多。
Array.from()可以将类数组对象转化为数组,可以实现对数组的浅拷贝,可以使用值来填充数组,这里用到的便是它的填充功能。

posted on 2020-08-02 21:23  沈卢  阅读(180)  评论(0编辑  收藏  举报

导航