一、当不考虑大数越界的情况(offer17)
思路:直接生成列表返回
复杂度: 时间复杂度 O(10^n) 空间复杂度O(1)
def printNumbers1(n):
return [i for i in range(1, pow(10, n))]
二、当考虑大数越界的情况
思路:将生成的数字类型改为字符类型 每次固定高位求低位 递归来做(是一种深度优先遍历)
如n=2时, 0 (0……9) 括号左边是十位 括号里是各位
……
9(0……9)
复杂度: 时间复杂度 O(10^n) 空间复杂度O(10^n)
【PS】
⭐ "x".join(list1) 将list1种的字符元素用符号x连接起来
⭐ 函数1内定义函数2 函数1中的变量对于函数2来说是全局变量 可以很好的存储元素
def printNumbers2(n):
def dps(x): # 传入的x代表固定的位 从高位开始固定 0 .... n-1
if x == n:
# 代表已经固定完一轮了
res.append(''.join(num))
return
for i in range(10): # 某位的取值遍历
num[x] = str(i) # 为该位赋值
dps(x+1) # 接着求低一位的值
num = ['0'] * n # 初始化临时的变量num
res = [] # 最终返回的结果列表
dps(0) # 从0开始 当n=1时 调用递归函数一遍(x=0) 当n=2时 遍历两遍(x=0 1)
return ','.join(res)