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

循环打印:\

  1. 计算出最大 的数字,
    我们可以自己写一个10的n次幂的的计算,用循环的方法或者是快速幂,也可以使用go原生math包中的pow10方法来计算,
  2. 定义数组长度,如果直接append拼接空字符串有点烧性能,可以直接申请一个长度为10^n -1的数组来存储值
  3. 循环添加元素,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