给定整数 n 和 k,找到 1 到 n 中字典序第 k 小的数字。

示例 :
输入:
n: 13 k: 2

输出:
10

解释:
字典序的排列是 [1, 10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9],所以第二小的数字是 10。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/k-th-smallest-in-lexicographical-order
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
————————

考虑到时间消耗,这题使用深度遍历会超时,因此我们不能使用普通的递归方法,我们使用数学方法统计从一个节点遍历到另一个节点需要的步数。

class Solution:def findKthNumber(self, n: int, k: int) -> int:# cal_steps是用于统计从节点n1到节点n2所需要的步数def cal_steps(n, n1, n2):# n1和n2为当前层的两个不同节点step = 0while n1 <= n:step += min(n2, n + 1) - n1n1 *= 10n2 *= 10return stepcur = 1  # 用于保存当前节点k -= 1  # 当k=0时返回当前cur节点while k > 0:steps = cal_steps(n, cur, cur + 1)  # 统计当前层从cur到cur+1需要的步数if steps <= k:  # 如果使用的步数小于等于最大值k,则统计当前层的cur+1到cur+2的步数,以此类推k -= stepscur += 1else:  # 如果使用的步数大于k,则进入下一层进行计算k -= 1cur *= 10return cur

LeetCode —— 440. 字典序的第K小数字(Python)相关推荐

  1. leetcode 440. 字典序的第K小数字(精)

    题目: 给定整数 n 和 k,找到 1 到 n 中字典序第 k 小的数字. 注意:1 ≤ k ≤ n ≤ 109. 示例 : 输入: n: 13 k: 2 输出: 10 解释: 字典序的排列是 [1, ...

  2. 计算字典的个数_[LeetCode] 440. 字典序的第K小数字

    题目链接: https://leetcode-cn.com/problems/k-th-smallest-in-lexicographical-order 难度:困难 通过率:28.4% 题目描述: ...

  3. D22 LeetCode 440.字典序的第K小数字(困难)

    一.题目 二.思路(自己) 题目要求是字典序排列,即按照字符串比较一样进行排列,前几天刚好面过类似的题,为了降低时间复杂度,我们可以采用红黑树进行排序. 使用TreeSet来存储里面的数组,重写比较器 ...

  4. 440. 字典序的第K小数字

    440. 字典序的第K小数字 给定整数 n 和 k,找到 1 到 n 中字典序第 k 小的数字. 注意:1 ≤ k ≤ n ≤ 109. 示例 : 输入: n: 13 k: 2 输出: 10 解释: ...

  5. LeetCode440. 字典序的第K小数字

    给定整数 n 和 k,返回 [1, n] 中字典序第 k 小的数字. 题目很简单,但是题本身并不简单. LeetCode440. 字典序的第K小数字 一.偷懒技巧 一个偷懒的技巧是将数字转化为字符串, ...

  6. 【字节跳动面试题】字典序的第K小数字

    字典序的第K小数字 class Solution {public:typedef long long ll;ll count(ll a, ll n) {ll b = a + 1, cnt = 0;fo ...

  7. Leetcode0440. 字典序的第K小数字(difficult,三种算法)

    目录 1. 题目描述 2. 解题分析 2.1 作弊的解法 2.2 哈希+减而治之 2.3 字典树 3. 代码实现 1. 题目描述 给定整数 n 和 k,返回 [1, n] 中字典序第 k 小的数字. ...

  8. leetcode-440 字典序的第K小数字

    给定整数 n 和 k,找到 1 到 n 中字典序第 k 小的数字. 注意:1 ≤ k ≤ n ≤ 10^9. 示例 : 输入: n: 13 k: 2 输出: 10 解释: 字典序的排列是 [1, 10 ...

  9. Leetcode 440.字典序第k小的数字

    字典序第k小的数字 给定整数 n 和 k,找到 1 到 n 中字典序第 k 小的数字. 注意:1 ≤ k ≤ n ≤ 109. 示例 : 输入: n: 13 k: 2 输出: 10 解释: 字典序的排 ...

最新文章

  1. Unknown column 'subject_1.pid' in 'field list') [SQL: 'SELECT anon_1.screen_id AS anon_1_screen_i
  2. 图像聚类与检索的简单实现(一)
  3. 稳定排序与不稳定排序的定义
  4. Java开发学习--MongoDB
  5. 查看mongodb数据路径_Mac OS 中安装和使用 MongoDB 的方法
  6. python 多进程与多线程配合拷贝文件目录
  7. cmd运行python程序
  8. java 蓝桥杯算法训练 筛选号码(题解)
  9. js模块化与面向对象编程思考与实践
  10. prometheus linux下载_Prometheus笔记
  11. java 噪声信道模型_噪声信道模型zz
  12. 如何安装红旗linux6.0声卡驱动
  13. 蓝丝雨第十四季商业实战系列(全民奇迹中控台实战)
  14. jinjia2调用json文件注意事项
  15. 2020年即将推出的智能手环APP定制开发
  16. 跨考计算机专业怎么学,跨考计算机考研经验分享
  17. 《软件项目管理》复习知识点
  18. 不懂SEO该如何做搜索引擎优化?
  19. Горький изучить головка.Eligendi culpa cupiditate libero quae.
  20. 树莓派python离线语音识别_Raspberry Pi

热门文章

  1. Map 和 WeakMap
  2. DreamFactory入门指南 - 第2章安装和配置DreamFactory
  3. 电脑开机提示EFI Netword 0 for ipv4 boot failed的原因及解决方法
  4. OSPF——优化技术(含配置)
  5. 什么样才能叫精通java_Java学到什么程度才能叫精通?
  6. 【Java】用while循环实现1+2+3......+100
  7. jsdelivr 缓存刷新
  8. C#LeetCode刷题之#28-实现strStr()(Implement strStr())
  9. C#LeetCode刷题之#867-转置矩阵(Transpose Matrix)
  10. react apollo_2020年的React + Apollo教程(真实示例)