计算字典的个数_[LeetCode] 440. 字典序的第K小数字
题目链接: https://leetcode-cn.com/problems/k-th-smallest-in-lexicographical-order
难度:困难
通过率:28.4%
题目描述:
给定整数 n
和 k
,找到 1
到 n
中字典序第 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小数字相关推荐
- LeetCode —— 440. 字典序的第K小数字(Python)
给定整数 n 和 k,找到 1 到 n 中字典序第 k 小的数字. 示例 : 输入: n: 13 k: 2 输出: 10 解释: 字典序的排列是 [1, 10, 11, 12, 13, 2, 3, 4 ...
- leetcode 440. 字典序的第K小数字(精)
题目: 给定整数 n 和 k,找到 1 到 n 中字典序第 k 小的数字. 注意:1 ≤ k ≤ n ≤ 109. 示例 : 输入: n: 13 k: 2 输出: 10 解释: 字典序的排列是 [1, ...
- D22 LeetCode 440.字典序的第K小数字(困难)
一.题目 二.思路(自己) 题目要求是字典序排列,即按照字符串比较一样进行排列,前几天刚好面过类似的题,为了降低时间复杂度,我们可以采用红黑树进行排序. 使用TreeSet来存储里面的数组,重写比较器 ...
- 440. 字典序的第K小数字
440. 字典序的第K小数字 给定整数 n 和 k,找到 1 到 n 中字典序第 k 小的数字. 注意:1 ≤ k ≤ n ≤ 109. 示例 : 输入: n: 13 k: 2 输出: 10 解释: ...
- LeetCode440. 字典序的第K小数字
给定整数 n 和 k,返回 [1, n] 中字典序第 k 小的数字. 题目很简单,但是题本身并不简单. LeetCode440. 字典序的第K小数字 一.偷懒技巧 一个偷懒的技巧是将数字转化为字符串, ...
- 【字节跳动面试题】字典序的第K小数字
字典序的第K小数字 class Solution {public:typedef long long ll;ll count(ll a, ll n) {ll b = a + 1, cnt = 0;fo ...
- leetcode-440 字典序的第K小数字
给定整数 n 和 k,找到 1 到 n 中字典序第 k 小的数字. 注意:1 ≤ k ≤ n ≤ 10^9. 示例 : 输入: n: 13 k: 2 输出: 10 解释: 字典序的排列是 [1, 10 ...
- Leetcode0440. 字典序的第K小数字(difficult,三种算法)
目录 1. 题目描述 2. 解题分析 2.1 作弊的解法 2.2 哈希+减而治之 2.3 字典树 3. 代码实现 1. 题目描述 给定整数 n 和 k,返回 [1, n] 中字典序第 k 小的数字. ...
- Leetcode 440.字典序第k小的数字
字典序第k小的数字 给定整数 n 和 k,找到 1 到 n 中字典序第 k 小的数字. 注意:1 ≤ k ≤ n ≤ 109. 示例 : 输入: n: 13 k: 2 输出: 10 解释: 字典序的排 ...
最新文章
- Xilinx_ISE 14.7在Win10下选择“open project”崩溃闪退的问题
- 20175223 《Java程序设计》第十一周学习总结
- 数据结构实验之图论二:图的深度遍历(DFS)
- python颜色的字母代码,如何在python中更改特定印刷字母的颜色?
- linux subsys_initcall
- c#爬虫-使用ChromeDriver 所见即所得
- hive学习08天-一次hvie面试题
- SilverLight学习笔记--Silverlight中操作DOM元素
- 一只潜力十足的专业电竞游戏鼠标——HyperX巨浪RGB电竞鼠标
- python微博爬虫程序_基于Python的新浪微博爬虫程序设计与研究
- 计算机系统更新从哪关闭,电脑总提示系统更新,怎么关闭?
- 【新书速递】深入浅出Electron
- android 模拟器 blue,android使用BlueStacks作为模拟器
- Win10电脑浏览器连不上网
- 增量迭代模型,瀑布模型,螺旋模型,快速原型模型
- 工资高的互联网工作者都在干什么
- 自信心受挫,该如何让项目团队成员重新振作起来
- Window通过cmd命令测试服务器带宽性能的方法(IP测试)
- Python有趣|数据分析三板斧
- Zigbee安全概述
热门文章
- 2019-03-09-算法-进化(旋转数组)
- Codeforces Global Round 12 C1 C2. Errich-Tac-Toe 思维构造 好题
- CF1043E Train Hard, Win Easy
- 洛谷P3270:成绩比较(容斥、组合数学)
- jzoj6308-中间值【分治】
- Ch5302-金字塔【区间dp】
- 2021“MINIEYE杯”中国大学生算法设计超级联赛(7)Yiwen with Formula(任意模数FFT)
- 《信号与系统》期中总结
- 【dfs】虫食算(ybtoj dfs-1-3)
- 【结论】取石子游戏(jzoj 1211)