【LeetCode】面试题17. 打印从1到最大的n位数
题目:
思路:
1、不考虑大数越界的情况,用一个循环就能简单搞定。
2、考虑大数情况,用一个n位的字符串表示数字,通过字符串实现循环加一并能够处理进位,然后从字符串中截取真正的数字。
代码:
Python
import math
class Solution(object):
def printNumbers(self, n):
"""
:type n: int
:rtype: List[int]
"""
# top = int(math.pow(10, n))
# return [i for i in range(1, top)]
number = ['0' for _ in range(n)]
result = list()
isOver = False
while not isOver:
# number循环加一
plus = 0 # 本次加一的进位标志
for i in range(n-1, -1, -1):
if i == n-1:
thisNum = int(number[i]) + 1
else:
thisNum = int(number[i]) + plus
if thisNum == 10: # 当前位有进位
if i == 0: # 最高位有进位, 超过最大值结束
isOver = True
else:
plus = 1
number[i] = '0'
else: # 当前位没有进位, 结束
number[i] = str(thisNum)
break
if not isOver: # 避免最后一次打印
for i in range(0, n):
if number[i] != '0':
break
result.append(''.join(number[i:]))
return [int(i) for i in result]