题解 | #数字序列中某一位的数字#

数字序列中某一位的数字

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相除的模和余数这个点,不是很理解。。。

全部评论

相关推荐

11-14 17:28
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务