剑指 Offer 44. 数字序列中某一位的数字 #
- 标签:数学、二分查找
- 难度:中等
题目大意 #
数字以 0123456789101112131415…
的格式序列化到一个字符序列中。在这个序列中,第 5
位(从下标 0
开始计数)是 5
,第 13
位是 1
,第 19
位是 4
,等等。
要求:返回任意第 n
位对应的数字。
解题思路 #
根据题意中的字符串,找数学规律:
-
123456789
:是9
个1
位数字。 -
10111213...9899
:是90
个2
位数字。 -
100...999
:是900
个3
位数字。 -
1000...9999
是9000
个4
位数字。 -
我们可以先找到对应的数字对应的位数
digits
。 -
然后找到该位数
digits
的起始数字start
。 -
再计算出
n
所在的数字number
。number
等于从起始数字start
开始的第 $\lfloor(n - 1) / digits\rfloor$ 个数字。即number = start + (n - 1) // digits
。 -
然后确定
n
对应的是数字number
中的哪一位。即idx = (n - 1) % digits
。 -
最后返回结果。
代码 #
|
|