打印1到最大的n位数
题目的意思是,输入一个
n
n
n,然后从1开始输出,2,3……直到
1
0
n
−
1
10^n-1
10n−1。
当
n
<
10
n<10
n<10的时候自然能一次循环遍历。当n更大的时候,就要考虑字符串的组合了。
这题考察细节和字符的处理,如果做过高精度加法的话,实在没什么难度……直接给代码了。
# offer15-solution
class Solution:
def Print1ToMaxOfNDigits(self, n):
if n <= 0:
return
number = ['0']*n
for i in range(10):
number[0] = str(i)
self.Print1ToMaxOfNDigitsRecursively(number, n, 0)
def PrintNumber(self, number):
# 此处的number为一个str类型的数组,每个数组元素是一个0-9之间数字的字符串形式
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('\t')
def Print1ToMaxOfNDigitsRecursively(self, number, length, index):
if index == length-1:
self.PrintNumber(number)
return
for i in range(10):
number[index+1] = str(i)
self.Print1ToMaxOfNDigitsRecursively(number, length, index+1)