主题
17. 打印从 1 到最大的 n 位数
来源
https://leetcode-cn.com/problems/da-yin-cong-1dao-zui-da-de-nwei-shu-lcof/
题目
输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。
示例:
输入: n = 1
输出: [1,2,3,4,5,6,7,8,9]
说明
- 用返回一个整数列表来代替打印
- n 为正整数
思路
用上一题的方法求出 10^n,然后循环
解题
js
/**
* @param {number} n
* @return {number[]}
*/
var printNumbers = function (n) {
let max = 1;
let x = 10;
while (n) {
if (n & 1) {
max *= x;
}
x = x * x;
n = n >> 1;
}
const res = [];
for (let i = 1; i < max; ++i) {
res.push(i);
}
return res;
};
原题
原题是要考虑到大数,可以用字符串存储数字,答案是 n 个 0-9 的数字全排列,再加上忽略开头的 0 的打印逻辑。
从零开始学算法
https://github.com/daqi/re0-algorithm/issues
欢迎 start & watch