Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >​LeetCode刷题实战440:字典序的第K小数字

​LeetCode刷题实战440:字典序的第K小数字

作者头像
程序员小猿
发布于 2021-11-23 07:28:47
发布于 2021-11-23 07:28:47
21500
代码可运行
举报
文章被收录于专栏:程序IT圈程序IT圈
运行总次数:0
代码可运行

算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !

今天和大家聊的问题叫做 字典序的第K小数字,我们先来看题面:

https://leetcode-cn.com/problems/k-th-smallest-in-lexicographical-order/

Given two integers n and k, return the kth lexicographically smallest integer in the range [1, n].

示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
输入:
n: 13   k: 2
输出:
10
解释:
字典序的排列是 [1, 10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9],所以第二小的数字是 10

解题

https://zhuanlan.zhihu.com/p/113194071

十叉树,用题目的测试用例来举例子。

我们求字典序第k个就是上图前序遍历访问的第k节点!但是不需要用前序遍历,如果我们能通过数学方法求出节点1和节点2之间需要走几步,减少很多没必要的移动。

其实只需要按层节点个数计算即可,图中节点1和节点2在第二层,因为n = 13,节点1可以移动到节点2(同一层)所以在第二层需要移动1步。

第三层,移动个数就是 (13 - 10 + 1) = 4 (min(13 + 1, 20) - 10)

所以节点1到节点2需要移动 1 + 4 = 5 步

当移动步数小于等于k,说明需要向右节点移动,图中就是节点1移动到节点2。

当移动步数大于k,说明目标值在节点1和节点2之间,我们要向下移动!即从节点1移动到节点10。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution:
    def findKthNumber(self, n: int, k: int) -> int:

        def cal_steps(n, n1, n2):
            step = 0
            while n1 <= n:
                step += min(n2, n + 1) - n1
                n1 *= 10
                n2 *= 10
            return step

        cur = 1
        k -= 1

        while k > 0:
            steps = cal_steps(n, cur, cur + 1)
            if steps <= k:
                k -= steps
                cur += 1
            else:
                k -= 1
                cur *= 10

        return cur

好了,今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力 。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员小猿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
算法细节系列(35):不一样的排序
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014688145/article/details/73251784
用户1147447
2019/05/26
4190
​LeetCode刷题实战47:全排列 II
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/01/20
2840
​LeetCode刷题实战47:全排列 II
LeetCode 386. 字典序排数(DFS&循环)
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/lexicographical-numbers 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
Michael阿明
2020/07/13
4280
LeetCode 386. 字典序排数(DFS&循环)
​LeetCode刷题实战31:下一个排列
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/01/20
3380
每日算法系列【LeetCode 386】字典序排数
例如,给定 n = 13,返回 [1,10,11,12,13,2,3,4,5,6,7,8,9] 。
godweiyang
2020/03/24
7990
每日算法系列【LeetCode 386】字典序排数
LeetCode 1754. 构造字典序最大的合并字符串
给你两个字符串 word1 和 word2 。 你需要按下述方式构造一个新字符串 merge :如果 word1 或 word2 非空,选择 下面选项之一 继续操作:
Michael阿明
2021/09/07
6200
​LeetCode刷题实战378:有序矩阵中第 K 小的元素
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/09/17
3780
每日一题(2022-04-18)——字典序排数
386. 字典序排数 题目描述: 给你一个整数 n ,按字典序返回范围 [1, n] 内所有整数。 你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。 示例1: 输入:n = 13 输出:[1,10,11,12,13,2,3,4,5,6,7,8,9] 示例2: 输入:n = 20 输出:[1,10,11,12,13,14,15,16,17,18,19,2,20,3,4,5,6,7,8,9] 思路: 解释: 以例二来看: 可以看到字典序的遍历,就是树的深度优
传说之下的花儿
2023/04/16
2050
每日一题(2022-04-18)——字典序排数
2022-02-05:字典序的第K小数字。 给定整数 n 和 k,找到 1
字典序的排列是 1, 10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9,所以第二小的数字是 10。
福大大架构师每日一题
2022/02/05
4390
​LeetCode刷题实战499:迷宫III
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2022/03/03
4640
​LeetCode刷题实战499:迷宫III
LeetCode 1625. 执行操作后字典序最小的字符串(BFS)
给你一个字符串 s 以及两个整数 a 和 b 。其中,字符串 s 的长度为偶数,且仅由数字 0 到 9 组成。
Michael阿明
2021/02/19
9880
LeetCode Weekly Contest 44解题思路
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014688145/article/details/77019115
用户1147447
2019/05/26
4370
​LeetCode刷题实战524:通过删除字母匹配到字典里最长单词
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2022/03/03
3930
​LeetCode刷题实战46:全排列
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/01/20
3930
​LeetCode刷题实战46:全排列
LeetCode 1061. 按字典序排列最小的等效字符串(并查集)
给出长度相同的两个字符串:A 和 B,其中 A[i] 和 B[i] 是一组等价字符。 举个例子,如果 A = "abc" 且 B = "cde",那么就有 'a' == 'c', 'b' == 'd', 'c' == 'e'。
Michael阿明
2020/07/13
1.6K0
LeetCode 3题合集,砍瓜切菜刷三题不费劲
今天是LeetCode专题的第34篇文章,刚好接下来的题目比较简单,很多和之前的做法类似。所以我们今天出一个合集,一口气做完接下来的57、59和60这三题。
TechFlow-承志
2020/05/14
4170
【C语言视角】数据结构之~二叉树
前言:总所周知~数据结构的二叉树对于初学者来说是一个十分难理解的知识点。接下来,请阅读本人对二叉树拙劣的理解~
小文要打代码
2024/10/16
1420
【C语言视角】数据结构之~二叉树
每天一道leetcode378-有序矩阵中第K小的元素
https://leetcode.com/problems/kth-smallest-element-in-a-sorted-matrix/
乔戈里
2019/09/17
1.1K0
【数据结构】二叉树(c语言)(附源码)
之前我们已经学习了树和二叉树的概念,以及二叉树的顺序实现方式--堆:
ephemerals__
2024/10/24
5600
【数据结构】二叉树(c语言)(附源码)
几乎刷完了力扣所有的树题,我发现了这些东西。。。
先上下本文的提纲,这个是我用 mindmap 画的一个脑图,之后我会继续完善,将其他专题逐步完善起来。
Nealyang
2020/12/03
3.4K0
几乎刷完了力扣所有的树题,我发现了这些东西。。。
推荐阅读
相关推荐
算法细节系列(35):不一样的排序
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验