码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【剑指offer】17.打印从1到最大的n位数


    Python3

    假设 n = 1 n=1 n=1,打印 [ 1 , 2 , . . . , 9 ] [1,2,...,9] [1,2,...,9]
    假设 n = 2 n=2 n=2,打印 [ 1 , 2 , . . . , 99 ] [1,2,...,99] [1,2,...,99]
    假设 n = 3 n=3 n=3,打印 [ 1 , 2 , . . . , 999 ] [1,2,...,999] [1,2,...,999]
    …
    以此类推
    最大的数字 m a x max max与 n n n之间的关系为 m a x = 1 0 n − 1 max=10^n-1 max=10n−1

    根据题意,可写如下代码:

    class Solution:
    	def printNumbers(self, n: int) -> List[int]:
    		return [num for num in range(1, 10**n)]
    
    • 1
    • 2
    • 3

    提交之后,顺利通过。

    看了评论区,说这题的本意是考察大数问题。上面的写法没有考虑大数(即大于int类型能表示的最大数),但实际上List[int]已经表达了输出的数字是int类型,因此实际上不必考虑大数。

    如果非要考虑大数,那本题的写法如下:(参考https://leetcode.cn/problems/da-yin-cong-1dao-zui-da-de-nwei-shu-lcof/solution/jian-zhi-offer-17-da-yin-cong-1dao-zui-d-ngm4/)

    class Solution:
        def printNumbers(self, n: int) -> List[int]:
    
            # 数字的全排列问题,使用深度优先搜索解决
            def dfs(index, num, digit):  # index表示当前在第几位,num表示存储数字各位上数值的列表,digit表示当前的数字共有几位
                if index == digit:  # 当前位数与digit相等,说明数字填充好了
                    res.append(int(''.join(num)))
                    return
                for i in range(10):  # 否则,填充下一位上的数值
                    num.append(str(i))
                    dfs(index + 1, num, digit)
                    num.pop()
    
            res = []  # res用于存储待打印的整数列表
    
            for digit in range(1, n + 1):  # digit表示数字的位数,如数字9有1位,数字99有2位,数字999有3位等等
                for first in range(1, 10):  # 数字的首位,首位的取值范围是[1,10)
                    num = [str(first)]  # num用于保存数字各位上的数值
                    dfs(1, num, digit)
            
            return res  # 返回整数列表
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    时间复杂度分析:

    递归生成全排列的数量为 1 0 n 10^n 10n,因此时间复杂度为 O ( 1 0 n ) O(10^n) O(10n)。

  • 相关阅读:
    如何创建一个aop
    嵌入式设计与开发项目-液位检测告警系统
    26.cuBLAS开发指南中文版--cuBLAS中的Level-2函数syr()
    解析异常SAXParseExceptionis如何处理
    java 学习初识集合
    docker运行中的容器新增映射端口
    如何制作传统节日网站(纯HTML代码)
    【手写数据库toadb】SQL解析器的实现架构,create table/insert 多values语句的解析树生成流程和输出结构分析
    spring配置数据源
    秦皇岛科学选育新品种 国稻种芯·中国水稻节:河北秸秆变肥料
  • 原文地址:https://blog.csdn.net/qq_15971883/article/details/125398496
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号