模拟法
自然数0,1,2,..,10,11,..,99,100,101,.., 可以根据自然数的位数(digitCount)划分为:
- 区间1:0-9
- 区间2:10-99
- 区间3:100-999
- ...
从小到大,进行计位递增模拟,确定n所在区间后,再结合该区间内自然数位数和n,即可确定对应数字。
# @param n int整型
# @return int整型
#
class Solution:
def findNthDigit(self , n: int) -> int:
# 从小到大,找到位数n所在区间
digitCount = 1
lowLimit,highLimit = 0,10
while True:
interval = (highLimit-lowLimit)*digitCount
# 判断是否在当前区间,若不是,则继续判断下一个区间;若是,则跳出循环
if n > interval:
n -= interval
lowLimit = highLimit
highLimit = highLimit*10
digitCount += 1
else:
break
# 确定该位置的数字属于哪个自然数
number = lowLimit + int(n/digitCount)
# 确定该位置的数字为自然数的第几位
place = n%digitCount
return int(str(number)[place])