题目:输入数字n,按顺序输出从1最大的n位10进制数。比如输入3,则输出1、2、3一直到最大的3位数即999。
思路:由于N非常大的话,会超过long long的表示范围,所以先求出n位十进制数的最大值max,然后从1到max循环输出是不可行的。
我们可以用n个元素的数组,每一位对应数字中的每一位:
第n-1位: 表示个位
第n-2位: 表示十位
...........................
这样每次只需要让第n-1个元素加1,如果等于10的话,就把它置为0,那么就往前进一位,如果前面是9的话,这个进位会一直往前转播,直到最前面一个非9的值。
最后一个元素9.....9,如果加1的话,那么得到:0...0,进位丢失。
代码如下:
def increment(nums):
odd = 1
for i in range(len(nums)-1, -1, -1):
sum = nums[i] + odd
if sum > 9:
if i == 0: #over maximum
return False
else:
nums[i] = 0
odd = 1
else:
nums[i] = sum
print(nums)
break
return True
nums = [0,0]
while increment(nums):
pass