崔竹 发表于 2026-2-26 08:15:03

剑指offer-77、打印从1到最⼤的n位数

题⽬描述

输⼊数字 n ,按顺序打印出从 1 到最⼤的 n 位⼗进制数。⽐如输⼊ 3 ,则打印出 1 、2 、3⼀直到最⼤的 3 位数 999 。

[*]⽤返回⼀个整数列表来代替打印
[*]n 为正整数
示例1
输⼊:1
返回值:
思路及解答

直接计算

不太清楚这道题是要考察什么(苦笑),⼏乎都是⼀个循环能解决的事情,仔细想了⼀下,也并没有想到其他⽐较令⼈⽿⽬⼀新的做法,⽤Math.pow(10, n) - 1 取出最⼤的边界条件
public class Solution {

        public int[] printNumbers(int n) {
                double len = Math.pow(10, n) - 1;
                int[] result = new int[(int) len];
                for (int i = 0; i < len; i++) {
                        result = i + 1;
                }
                return result;
        }
}

[*]时间复杂度:O(10ⁿ),需要生成10ⁿ-1个数字
[*]空间复杂度:O(10ⁿ),需要存储所有数字
当n≥10时,10ⁿ-1会超过int范围,导致溢出
字符串模拟

针对大数问题,使用字符串来模拟数字的生成。
import java.util.ArrayList;import java.util.List;public class Solution {    public int[] printNumbers(int n) {      if (n

盛天欣 发表于 2026-3-4 00:35:17

感谢发布原创作品,程序园因你更精彩

翁真如 发表于 前天 20:40

过来提前占个楼

任佳湍 发表于 昨天 23:07

收藏一下   不知道什么时候能用到
页: [1]
查看完整版本: 剑指offer-77、打印从1到最⼤的n位数