LCR 163. 找到第 k 位数字
大约 2 分钟
---
LCR 163. 找到第 k 位数字
- 标签:数学、二分查找
- 难度:中等
题目链接
题目大意
数字以 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开始的第 个数字。即number = start + (n - 1) // digits。然后确定
n对应的是数字number中的哪一位。即idx = (n - 1) % digits。最后返回结果。
代码
class Solution:
def findNthDigit(self, n: int) -> int:
digits = 1
start = 1
base = 9
while n > base:
n -= base
digits += 1
start *= 10
base = start * digits * 9
number = start + (n - 1) // digits
idx = (n - 1) % digits
return int(str(number)[idx])