剑指 Offer 17. 打印从1到最大的n位数
题目:剑指 Offer 17. 打印从1到最大的n位数
解题思路1:(非考点,不推荐这么写)
python无需考虑大数越界问题,直接一路输出即可
class Solution:
def printNumbers(self, n: int) -> List[int]:
res = []
for i in range(1, 10 ** n):
res.append(i)
return res
# return [i for i in range(1, 10 ** n)]
# return list(range(1, 10 ** n))
优质解答:全排列递归求解(参考自K神)
固定高位,递归打印后面的数字。设置开始位start,将数字的高位0去除;设置检测值nine,当该位到达9后,下一个数字需要进位,此时控制start-1,即前移一位,回溯时需要将nine-1回到前一位。最后在将字符串转化为int放入列表中。
class Solution:
def printNumbers(self, n: int) -> List[int]:
def dfs(x):
if x == n:
s = ''.join(num[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
num[x] = str(i)
dfs(x+1)
self.nine -= 1
num, res = ['0'] * n, []
self.nine = 0
self.start = n - 1
dfs(0)
return res