面试题12:打印1到最大的n位数

打印1到最大的n位数

就是一个DFS,假设为1位数,可以发现其结果是从1到9,考虑到大数的关系,我们可以使用一个字符数组来表示(因为字符串是不可变的),用0到9来代入到字符数组中对应的下标中,每增加一个下标说明增加DFS的一层。

def print1ToMaxOfNDigits(n):
    if n <= 0:
        return
    def printNumber():
        isBeginning0 = True
        for i in range(n):
            if isBeginning0 and number[i] != '0':
                isBeginning0 = False
            if not isBeginning0:
                print("".join(number[i:]))
                break
    def print1ToMaxOfNDigitsRecursive(index):
        if index == n-1:
            printNumber()
            return
        for i in range(10):
            number[index+1] = str(i)
            print1ToMaxOfNDigitsRecursive(index+1)
    number = ['' for i in range(n+1)]
    for i in range(10):
        number[0] = str(i)
        print1ToMaxOfNDigitsRecursive(0)
posted @ 2017-08-07 16:08  banananana  阅读(166)  评论(0编辑  收藏  举报