数字序列中某一位的数字

last modify

问题简述

剑指 Offer 44. 数字序列中某一位的数字 - 力扣(LeetCode)

数字以0123456789101112131415…的格式序列化到一个字符序列中,求任意第n位对应的数字。
详细描述
数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。

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

示例 1:
    输入:n = 3
    输出:3
示例 2:
    输入:n = 11
    输出:0
 
限制:
    0 <= n < 2^31

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shu-zi-xu-lie-zhong-mou-yi-wei-de-shu-zi-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路:找规律

数字序列中某一位的数字(迭代 + 求整 / 求余,清晰图解)

Python:迭代+求整/求余

数字序列中某一位的数字(迭代 + 求整 / 求余,清晰图解)

class Solution:
    def findNthDigit(self, n: int) -> int:
        digit, start, cnt = 1, 1, 9
        
        while n > cnt:  # 1. 计算所属区间,如 1~9、10~99、100~999、... 等
            n -= cnt
            start *= 10
            digit += 1
            cnt = 9 * start * digit
        
        num = start + (n - 1) // digit  # 2. 计算属于区间中的哪个数字
        idx = (n - 1) % digit  # 3. 计算在该数字的第几位
        return int(str(num)[idx])  # 4. 返回结果

Last updated