0400:第 N 位数字(★)
目录
题目
给你一个整数 n
,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...]
中找出并返回第 n
位上的数字。
示例 1:
输入:n = 3 输出:3
示例 2:
输入:n = 11 输出:0 解释:第 11 位数字在序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... 里是 0 ,它是 10 的一部分。
提示:
1 <= n <= 231 - 1
分析
#1
- 针对数位上的这种问题,一种常用的方法是二分+计数
- 二分查找第一个 x 使得序列 [1,x] 的数字个数>=n
- 然后再定位 x 中的位置即可
- 求序列 [1,x] 的数字个数,可以用数位 dp,也可以用贡献法
- 这里采用贡献法
- 以百位为例,除了 [1,99],其它数都有百位,因此就是 x-99
|
|
45 ms
#2
- 还有一种常用的方法是分段计数
- 将序列分为 [1,9]、[10,99]、[100,999] 等段,分别计数
- 遍历求出第 n 个属于哪一段,再定位具体位置即可
解答
|
|
36 ms