0440:字典序的第K小数字(★★)
目录
题目
给定整数 n
和 k
,返回 [1, n]
中字典序第 k
小的数字。
示例 1:
输入: n = 13, k = 2 输出: 10 解释: 字典序的排列是 [1, 10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9],所以第二小的数字是 10。
示例 2:
输入: n = 1, k = 1 输出: 1
提示:
1 <= k <= n <= 109
相似问题:
分析
- 采用试填法,先考虑首位:
- 统计 [1,n] 中首位 1 的个数 w
- 如果 w>=k,首位即是 1
- 如果 w<k,更新 k-=w,继续试填 2
- 依此类推确定首位为 a
- 接着考虑第二位:
- 如果 k=1,说明 a 即为所求,没有第二位
- 否则,更新 k-=1,第二位试填 0
- 接着要统计 [1,n] 中前缀为 a0 的个数
- 后面依此类推
- 综上,每一步试填需要计算 [1,n] 中前缀 p 的个数
- 可以采用分段计数
- 分别计算 p 后面跟 0 位、1 位、2 位等的个数即可
解答
|
|
38 ms