【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]               

相关问题

原文地址:https://www.cnblogs.com/cling-cling/p/12985727.html