跳到主要内容

剑指 Offer 44. 数字序列中某一位的数字

题目描述

做题链接:剑指 Offer 44. 数字序列中某一位的数字

解题思路

首先,我们要确定,要找的数字是几位数,数字有如下规律:

数字位数个数
1~9110 - 1
10~992100 - 10
100~99931000 - 100
k$10^k - 10^{k-1}$

根据输入的 n 可以很容易的确定位数,举例 n = 200

数字位数个数
2001200 - (10 - 1) * 1 = 191
1912191 - (100 - 10) * 2 = 11
11311 - (1000 - 100) * 3 < 0

所以,位数为 3 位, 由 11 / 3 = 3 .. 2, 所以是第三位(从100开始)的第 4 个,而且是位于第1位。 所以,处于的数字为 100 + 4 - 1 = 103,第二个元素为 0

代码

class Solution:
def findNthDigit(self, n: int) -> int:
digit = 0
temp = 0
while n - temp > 0:
n = n - temp
digit += 1
temp = (10 ** (digit) - 10 ** (digit - 1)) * digit

a, b = n // digit, n % digit
cur = 10 ** (digit - 1) + a - 1 + (1 if b > 0 else 0)
return int(str(cur)[b - 1])