面试题17:打印从1到最大到n位数

次题其实考察的是大数问题,但是我目前是用python3进行编程,在python中没有数字的限制,所以会出现直接循环的效率比用大数的方法要快,但是这里还是建议大家先思考大数方法:
其实就是输入n就定义一个n长度的数组,每一个位置代表真实数字对应的位置,然后分辨从0-9循环通过字符串进行转换,防止超出传统的int或者long的最大范围

"""
title:打印从1到最大的n位数
introduce:
输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。

示例 1:
输入: n = 1
输出: [1,2,3,4,5,6,7,8,9]

说明:
用返回一个整数列表来代替打印
n 为正整数

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/da-yin-cong-1dao-zui-da-de-nwei-shu-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
"""
from typing import List

class Solution:
	def printNumbers(self, n: int) -> List[int]:
	    nums = []
	    temp = [0 for i in range(n)]

	    def dashu(temp, n, index):
	    	if index == n - 1:
	    		ch = ''
	    		for c in temp:
	    			ch = ch + str(c)
	    		nums.append(int(ch))
	    	else:
	    		for i in range(10):
	    			temp[index+1] = i
	    			dashu(temp.copy(), n, index+1)


	    for i in range(10):
	    	temp[0] = i
	    	dashu(temp.copy(), n, 0)

	    return nums[1:]

"""
python中效率高的方法
class Solution:
	def printNumbers(self, n: int) -> List[int]:
		max = 10**n
		return list(1, range(max))
"""

if __name__ == "__main__":
	a = Solution()
	print(a.printNumbers(2))

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值