Leetcode 440. 字典序的第K小数字
Leetcode 440. 字典序的第K小数字
题目描述:
给定整数 n
和 k
,返回 [1, n]
中字典序第 k
小的数字。
示例 1:
1 | 输入: n = 13, k = 2 |
示例 2:
1 | 输入: n = 1, k = 1 |
提示:
1 <= k <= n <= 109
思路
通过观察字典序的排列可以发现以下规律:
- 以i+1开头的字典序肯定大于以i开头的
- i*10 => 字典序+1
- i+1 => 字典序+(i+1作为前缀的最小值 - i作为前缀的最小值)
要找到在[1,n]中第k小的数字,我们肯定需要从以i作为前缀的开始数,首先需要计算出以i为前缀的个数,以i为前缀的个数即:以i+1为前缀的最小值-以i为前缀的最小值,且这些值都必须小于n。
找到以i为前缀的个数count后,有两种情况:
- k>count,说明以i为前缀的个数不够,还需要继续去找i+1的,k-=count,将i+1;
- k<=count,则说明第k小的数字就是以i开头的,那么通过将i*10将字典序+1,然后重复上面的步骤就可以找出第k小字典序的数字了。
代码
1 | impl Solution { |
- 本文标题:Leetcode 440. 字典序的第K小数字
- 本文作者:Xhofe
- 创建时间:2022-03-23 14:08:00
- 本文链接:https://nn.ci/posts/leetcode-440.html
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
评论