Skip to content

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

Waiting For Your Next Big Idea