打印从1到最大的n位数
【题目】:
输入数字n,按顺序打印从1到最大的n位十进制数。比如输入3,则打印1,2,3,…,999。
【解体思路】:
- 这个题目需要考虑大数的问题,使用字符串来表示这个数字,然后在字符串上模拟加法。
- 还可以使用递归方法,将问题转化成数字的全排列。
示例代码1:
def func(n):
if n [int]:
def dfs(x):
if x == n: # 终止条件:已固定完所有位
res.append(''.join(num)) # 拼接 num 并添加至 res 尾部
return
for i in range(10): # 遍历 0 - 9
num[x] = str(i) # 固定第 x 位为 i
dfs(x + 1) # 开启固定第 x + 1 位
num = ['0'] * n # 起始数字定义为 n 个 0 组成的字符列表
res = [] # 数字字符串列表
dfs(0) # 开启全排列递归
return ','.join(res) # 拼接所有数字字符串,使用逗号隔开,并返回
class Solution(object):
def printNumbers(self, n):
"""
:type n: int
:rtype: List[int]
"""
def dfs(x):
if x == n:
s = ''.join(nums[self.start:])
if s != '0':
res.append(int(s))
if n - self.start == self.nine:
self.start -= 1
return
for i in range(10):
if i == 9:
self.nine += 1
nums[x] = str(i)
dfs(x+1)
self.nine -= 1
nums = ['0'] * n
res = []
self.start = n - 1
self.nine = 0
dfs(0)
return res