Skip to the content.

leetcode [面试题44] 数字序列中某一位的数字


Contact me:

Blog -> https://cugtyt.github.io/blog/index
Email -> cugtyt@qq.com
GitHub -> Cugtyt@GitHub


数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。

请写一个函数,求任意第n位对应的数字。

示例 1:

输入:n = 3
输出:3

示例 2:

输入:n = 11
输出:0

限制:

0 <= n < 2^31

思路,考虑到0-9特殊处理,10-99,9*10*2个数字,100-999,9*100*3个数字,把n依次减去这些数字得到新n,n//位数表示第多少个数字,n%位数表示该数字第多少位。

class Solution:
    def findNthDigit(self, n: int) -> int:
        if n < 10: return n
        else:
            n -= 10
        leng = 2
        while n >= 9 * 10**(leng - 1) * leng:
            n -= 9 * 10**(leng - 1) * leng
            leng += 1
        a = (n // leng) + 10**(leng - 1)
        b = leng - n % leng - 1
        while b:
            a //= 10
            b -= 1
        return a % 10