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

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

示例 1:

输入:n = 3
输出:3

示例 2:

输入:n = 11
输出:0

限制:

  • 0 <= n < 2^31

Python 解答:

class Solution:
    def findNthDigit(self, n: int) -> int:
        if n == 0:
            return 0
        base = 1
        total = 0
        i = 1
        while total < n:
            total += 9*base*i
            base *= 10
            i += 1
        #求出第几个
        base = base//10
        i -= 1
        total -= 9*base*i
        diff = n - total
        d, r = divmod(diff, i)
        if r == 0:
            res = (base+d-1) % 10
        else:
            num = base + d
            bit = i - r
            while bit > 0:
                num //= 10
                bit -= 1
            res = num % 10
        return res
最后修改日期: 2021年4月10日

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。