题目描述
打印1到最大的n位数,如n=3时打印1到999
一开始会想到
n = 3 num = 1 for i in range(n): num = num*10 for i in range(1,num): print(i)但是当n过大时程序会出现问题,使用递归模拟数字的加法。
def Print1ToMaxOfNDigits2(n): if n <= 0: return number = ['0'] * n for i in range(10): number[0] = str(i) #第一位数字从0-9 Print1ToMaxOfNDigitsRecursively(number, n, 0) def PrintNumber(number): #进位部分 isBeginning0 = True nLength = len(number) for i in range(nLength): if isBeginning0 and number[i] != '0': isBeginning0 = False if not isBeginning0: print('%c' %number[i]) print('') def Print1ToMaxOfNDigitsRecursively(number, length, index): #第二位到第n-1位数字打印 if index == length - 1: PrintNumber(number) return for i in range(10): number[index + 1] = str(i) Print1ToMaxOfNDigitsRecursively(number, length, index+1) Print1ToMaxOfNDigits2(2)
进位部分 PrintNumber没弄懂。两个if是如何实现进位,一起if的判断很复杂。
这道题先放在这,留之后解决。
https://blog.csdn.net/permike/article/details/52311211 是python逻辑规则
其实还可以通过数字排列解决问题。