leetcode 打卡 | 5

139 阅读1分钟

题目描述

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

示例 1:

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

说明:

用返回一个整数列表来代替打印 n 为正整数

思路分析

JS Api 调用方法
用Math.max()计算出最大数,然后再计算从1到最大数之间的所有值

快速幂
用快速幂方法计算出最大数,然后再计算从1到最大数之间的所有值

AC代码

// JS Api 调用方法

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


// 快速幂

const printNumbers = n => {
    let baseX = 10
    let sum = 1
    while(n) {
        if(n & 1 == 1) {
            sum *= baseX
        }
        n >>= 1
        // 因为这里借助了二进制工具,所以每多一位是需要乘baseX
        baseX *= baseX
    }
    
    let res = []
    for(let i = 1; i < sum; i++) {
        res.push(i)
    }
    return res
}

总结