Description
输入数字 n,按顺序打印出从1到最大的 n 位十进制数,比如输入3,则打印出1、2、3 一直到最大的 3 位数 999。
Solutions
很明显,这是有陷阱的题目,看上去最简单的方法是,通过数位计算出 n 位数十进制的最大数,然后从 1 循环输出到最大数,但是很明显当 n 比较大的时候是会超过整型的计数范围的。
想起来比较乱,因为进位弄的很乱,还是从功能角度来拆分这个任务会比较好。首先可将任务分成两个部分,第一个是加1操作,每次对这个数加一。第二个操作是打印操作,加数成功后要进行打印。
def PrintList(nums):
s = ''
n = len(nums)
idx = -1
for i, num in enumerate(nums):
if num != 0:
idx = i
break
for i in range(i, n):
s += str(nums[i])
print s
def Increment(nums):
is_overflow = False
n = len(nums)
takeover = 0
for i in range(n-1, -1, -1):
sum_i = nums[i] + takeover
if i == n-1:
sum_i += 1
if sum_i < 10:
nums[i] = sum_i
break
else:
if i == 0:
is_overflow = True
break
else:
sum_i -= 10
takeover = 1
nums[i] = 0
return is_overflow
def Print1ToMaxOfNDigits(n):
int_list = [0 for _ in range(n)]
while not Increment(int_list):
PrintList(int_list)
Print1ToMaxOfNDigits(3)