剑指offer系列-面试题-17 - 打印1到最大的n位数 (python)

mac2026-08-20  2

文章目录

1. 题目2. 解题思路3. 代码实现3.1 无意义解法3.2 考虑大数问题 4. 总结5. 参考文献

1. 题目

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

2. 解题思路

其实,本题的考点在于,当输入的n很大是,求的最大的n位数字是否会溢出,也就是需要考虑"大数问题"。作者考察的是在字符创上模拟数字加法来绕过"大数问题"。

详情 见java剑指offer原题解法

3. 代码实现

3.1 无意义解法

class Solution: def print_numbers(self, n): """ """ return list(range(1, 10**n)

3.2 考虑大数问题

class Solution: def __init__(self): self.result = [] # 用来保存结果 def printNumbers(self, n: int) -> List[int]: if n <= 0: return [] number = ["0"]*n number[-1] = "1" for i in range(0, 10): number[0] = chr(ord("0")+i) # ord 是将一个字符转换成 ASCII 码,chr 是将一个 ASCII 码转换成一个数字 self.Print1ToMaxOfDigitsRecursively(number, n, 0) return (self.result[1:]) def Print1ToMaxOfDigitsRecursively(self, number, length, index): if index == length - 1: self.PrintNumberNormal(number) self.result.append(int("".join(number))) return for i in range(10): number[index+1] = chr(ord("0")+i) self.Print1ToMaxOfDigitsRecursively(number, length, index+1) def PrintNumberNormal(self, number): number = int("".join(number)) if number != 0: print(number)

4. 总结

其实,本题的考点在于,当输入的n很大是,求的最大的n位数字是否会溢出,也就是需要考虑"大数问题"。

5. 参考文献

[1] 剑指offer丛书 [2] 剑指Offer——名企面试官精讲典型编程题

最新回复(0)