题解 | #数字序列中某一位的数字#
数字序列中某一位的数字
http://www.nowcoder.com/practice/29311ff7404d44e0b07077f4201418f5
小于10的数字一位数,1~9,共9个数字,9位; 小于100的数字两位数,10~99,共90个数字,180位; 小于1000的数字三位数,100~999,共900个数字,2700位; ……
我们可以用这样的方式,不断减去前面位数较少的数字的那些位,锁定第n位所在的区间,即第n位是几位数。这个区间的起点值加上剩余部分除以这个区间的位数就可以定位n在哪个数字上,再通过n对位数取模可以定位是哪一位。(下标从0开始,需要对n-1)
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param n int整型
# @return int整型
#
class Solution:
def findNthDigit(self , n: int) -> int:
i=0
while n>0:#锁定第n位是几位数。是i位数
temp=n#记录做减法之前n是多少,后面退出while后要用上
n=n-(i+1)*9*(10**i)
i=i+1
zhengchu=(temp-1)//i#temp要减1之后再算和i相除的模和余数
yushu=(temp-1)%i
num=zhengchu+10**(i-1)
res=int(str(num)[yushu])
return res
就是对n-1之后再算和i相除的模和余数这个点,不是很理解。。。