440. 字典序的第K小数字
440. 字典序的第K小数字
给定整数 n 和 k,找到 1 到 n 中字典序第 k 小的数字。
解释:
字典序的排列是 [1, 10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9],所以第二小的数字是 10。
解题思路
N个数字可以组织成为具有n个节点的10叉树,该树的前序遍历就是数字的字典序,如图所示
我们的目标就是需要找前序遍历的第k个节点
我们可以选择性的选择父节点遍历,不需要遍历前k个节点。
例如
输入:
n: 13 k: 6输出:
2解释:
字典序的排列是 [1, 10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9],所以第六小的数字是 2。
我们可以通过计算出,以1开头有多少个节点,对比和k的关系。
- 以1为根节点的子树节点数量为5,如果k为6,说明不需要遍历以1为根节点的树,直接向左移动到以2为根节点的树上,继续遍历
- 以1为根节点的子树节点数量为5,如果k为2,说明我们需要遍历的节点必然在根节点1的子树上面,我们移动到根节点的最左子节点,继续遍历
如何计算子树的节点树
从上图可以观察出,每一层节点的数字都是单调递增的,例如10,11…19,20,因此我们通过计算根节点的最左节点来固定每一层的节点数
每一层我们需要计算的节点数,位于上图红线划分的区间中。
代码
class Solution {public int findKthNumber(int n, int k) {long cur=1;k--;while (k>0){int number = findingKthNumber(n, cur);if (k>=number){k-=number;cur++;}else {k--;cur*=10;}}return (int)cur;}//sum 上一层的数字public int findingKthNumber(int n, long cur) {long next=cur+1;long res=0;while (cur<=n){res+= Math.min(n-cur+1,next-cur);cur*=10;next*=10;}return (int)res;}
}
440. 字典序的第K小数字相关推荐
- 计算字典的个数_[LeetCode] 440. 字典序的第K小数字
题目链接: https://leetcode-cn.com/problems/k-th-smallest-in-lexicographical-order 难度:困难 通过率:28.4% 题目描述: ...
- 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来存储里面的数组,重写比较器 ...
- 【字节跳动面试题】字典序的第K小数字
字典序的第K小数字 class Solution {public:typedef long long ll;ll count(ll a, ll n) {ll b = a + 1, cnt = 0;fo ...
- LeetCode440. 字典序的第K小数字
给定整数 n 和 k,返回 [1, n] 中字典序第 k 小的数字. 题目很简单,但是题本身并不简单. LeetCode440. 字典序的第K小数字 一.偷懒技巧 一个偷懒的技巧是将数字转化为字符串, ...
- 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 解释: 字典序的排 ...
最新文章
- linux下 get,Unix/Linux下 getrusage 的用法
- IE滤镜实现透明度/阴影/渐变等特效
- 为什么是get()和set()方法?
- python调用kafka拉取数据失败_无法使用kafkapython从另一个容器向Kafka容器发出请求...
- php mysql_connect 不支持_php mysql_connect不支持的解决方法
- 松下壁挂式新风系统推荐_壁挂式新风系统哪个好?
- JavaScript 中的闭包和作用域链(读书笔记)
- 『重构--改善既有代码的设计』读书笔记----Split Temporary Variable
- 阿里扔给腾讯一个烫手山芋
- 转移服务器显示乱码,两台服务器之间数据传输乱码问题
- 软考中级软件设计师---下午题
- C语言学习笔记->const和define区别
- 【科研绘图】沐风老师3DMAX极小曲面建模教程
- vue-router
- ysdk应用宝渠道接入问题记录
- Instant Contiki
- GAGE USB信号采集卡
- 【数学问题2】向量微分
- 1.2样本空间和随机事件
- mxgate是gpcopy同步速度的2倍