根据规律计算; 由于数字按照顺序排列: 0,1,2,3,4,5,6,7,8,9 10 ** 1 以内, 步长(位数)为 1 10, 11, 12 ... 99, 10 ** 2 以内,步长为2 100, 101, ... 999, 10 ** 3 以内,步长为3 ... 则设置当前值为 base = 0 n 所在的位置应该在 (base, base + (10 ** step - 10 ** (step - 1)) * step) 之间, n 比累加 base 多了 k = n - base, n 前一个最大的位数为 last = 10 ** (step - 1), n 位所处的数字应在 digit = last + k // step 第 n 位的数字为 digit[k % step]
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param n int整型
# @return int整型
#
class Solution:
def findNthDigit(self , n: int) -> int:
# write code here
if n < 10: return n
base = 0
step = 1
while not base < n < base + (10 ** step - 10 ** (step - 1)) * step:
base += (10 ** step - 10 ** (step - 1)) * step
step += 1
k = n - base - 1
digit = 10 ** (step - 1) + k // step
return int(str(digit)[k % step])