题目链接: https://leetcode-cn.com/problems/k-th-smallest-in-lexicographical-order

难度:困难

通过率:28.4%

题目描述:

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

注意:1 ≤ k ≤ n ≤ 109。

示例:

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

思路:

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

我们求字典序第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。

代码:

class Solution:def findKthNumber(self, n: int, k: int) -> int:def cal_steps(n, n1, n2):step = 0while n1 <= n:step += min(n2, n + 1) - n1n1 *= 10n2 *= 10return stepcur = 1k -= 1while k > 0:steps = cal_steps(n, cur, cur + 1)if steps <= k:k -= stepscur += 1else:k -= 1cur *= 10return cur

计算字典的个数_[LeetCode] 440. 字典序的第K小数字相关推荐

  1. LeetCode —— 440. 字典序的第K小数字(Python)

    给定整数 n 和 k,找到 1 到 n 中字典序第 k 小的数字. 示例 : 输入: n: 13 k: 2 输出: 10 解释: 字典序的排列是 [1, 10, 11, 12, 13, 2, 3, 4 ...

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

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

  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. leetcode-440 字典序的第K小数字

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

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

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

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

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

最新文章

  1. Xilinx_ISE 14.7在Win10下选择“open project”崩溃闪退的问题
  2. 20175223 《Java程序设计》第十一周学习总结
  3. 数据结构实验之图论二:图的深度遍历(DFS)
  4. python颜色的字母代码,如何在python中更改特定印刷字母的颜色?
  5. linux subsys_initcall
  6. c#爬虫-使用ChromeDriver 所见即所得
  7. hive学习08天-一次hvie面试题
  8. SilverLight学习笔记--Silverlight中操作DOM元素
  9. 一只潜力十足的专业电竞游戏鼠标——HyperX巨浪RGB电竞鼠标
  10. python微博爬虫程序_基于Python的新浪微博爬虫程序设计与研究
  11. 计算机系统更新从哪关闭,电脑总提示系统更新,怎么关闭?
  12. 【新书速递】深入浅出Electron
  13. android 模拟器 blue,android使用BlueStacks作为模拟器
  14. Win10电脑浏览器连不上网
  15. 增量迭代模型,瀑布模型,螺旋模型,快速原型模型
  16. 工资高的互联网工作者都在干什么
  17. 自信心受挫,该如何让项目团队成员重新振作起来
  18. Window通过cmd命令测试服务器带宽性能的方法(IP测试)
  19. Python有趣|数据分析三板斧
  20. Zigbee安全概述

热门文章

  1. 2019-03-09-算法-进化(旋转数组)
  2. Codeforces Global Round 12 C1 C2. Errich-Tac-Toe 思维构造 好题
  3. CF1043E Train Hard, Win Easy
  4. 洛谷P3270:成绩比较(容斥、组合数学)
  5. jzoj6308-中间值【分治】
  6. Ch5302-金字塔【区间dp】
  7. 2021“MINIEYE杯”中国大学生算法设计超级联赛(7)Yiwen with Formula(任意模数FFT)
  8. 《信号与系统》期中总结
  9. 【dfs】虫食算(ybtoj dfs-1-3)
  10. 【结论】取石子游戏(jzoj 1211)