zoukankan      html  css  js  c++  java
  • 【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]               
    

    相关问题

  • 相关阅读:
    leetcode Remove Nth Node From End of List
    leetcode Plus One
    leetcode climbing stairs
    leetcode Merge Two Sorted Lists
    leetcode Maximum Subarray
    leetcode Binary Tree Level Order Traversal I II
    leetcode Pascal's Triangle II
    leetcode pascal's triangle
    leetcode valid parentheses
    leetcode Path Sum
  • 原文地址:https://www.cnblogs.com/cling-cling/p/12985727.html
Copyright © 2011-2022 走看看