j
jaryue
V1
2023/04/12阅读:12主题:默认主题
leetcode剑指 Offer 17. 打印从1到最大的n位数
leetcode 剑指 Offer 17. 打印从1到最大的n位数 .
题目描述
输入数字 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/problems/da-yin-cong-1dao-zui-da-de-nwei-shu-lcof 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
我们先要确定我们要打印 的值有哪些
n为位数,那么最大的数字为10^n -1,,所以我们需要从1打印到10^n -1
法1
循环打印:\
-
计算出最大 的数字,
我们可以自己写一个10的n次幂的的计算,用循环的方法或者是快速幂,也可以使用go原生math包中的pow10方法来计算, -
定义数组长度,如果直接append拼接空字符串有点烧性能,可以直接申请一个长度为10^n -1的数组来存储值 -
循环添加元素,r[i]=i+1,因为没有0
-
时间复杂度(O(10^n)) -
空间复杂度(O(10^n))
执行结果
法1
func printNumbers(n int) []int {
l:=int(math.Pow10(n))-1//计算最大值
r:=make([]int,l)//构建数组
for i := 0; i < l; i++ {
r[i]=i+1//数组添加值
}
return r//返回结果
}
执行用时: 12 ms , 在所有 Go 提交中击败了 25.86% 的用户 内存消耗: 6.6 MB , 在所有 Go 提交中击败了 93.30% 的用户 通过测试用例: 5 / 5
作者介绍
j
jaryue
V1