剑指offer-面试题17-打印从1到最大的n位数-python

#-*- coding:utf-8 -*-
'''
descrption: 打印从1到最大的n位数
题目:输入数字n,按顺序打印出1到最大的n位十进制数
这里需要考虑n很大时用int甚至long long都无法表示,因为python的字符串是不可变对象,这里我们采用数组的方式并用在最左边加一个空间来判断是否最大值
'''

class Solution:
    def print_until_max_n(self, n):
        '''
        1。 这里创建的数组的位数比要求的多一位,最左边的一位是标志位,类如n=3,那么999下一个数就是1000,那么我只要输出最左边一位不为1时的所有的数
        2。 这里有一个从左到右遍历数组的过程碰到9就继续往左移位,然后碰到第一个不为9就加一,右边的置0
        3.  这里给出一个return值,0代表ok,1代表有问题
        '''
        if n<=0:
            print('something Wrong')
            return 1
        arr = [0] * (n+1)
        arr[n] = 1
        while not arr[0]:
            print(''.join(map(str, arr[1:])))
            i = n+1
            while i > 1 and arr[i-1] == 9:
                i -= 1
            arr[i-1] += 1
            for j in range(i, n+1):
                arr[j] = 0
        return 0

s = Solution()
flag=s.print_until_max_n(3)
flag=s.print_until_max_n(-1)

 

你可能感兴趣的:(剑指offer)