[剑指 Offer 44. 数字序列中某一位的数字] | 刷题打卡

222 阅读1分钟

今天我们来做一道LeetCode上的题目,原题链接:剑指 Offer 44. 数字序列中某一位的数字

题目描述

  • 数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。
  • 请写一个函数,求任意第n位对应的数字。
  • 示例 1:
    输入:n = 3
    输出:3
  • 示例 2:
    输入:n = 11
    输出:0
  • 限制:
    0 <= n < 2^31

思路分析

  • 边界分析:if n=0;return 0
  • 通用分析:
    # 1(10^0)     ~   9
    # 10(10^1)    ~   99
    # 100(10^2)   ~   999
    # 1000(10^3)  ~   9999
    # 1000m(10^m)~   9999m
    # m = 位数
    # 总计:10^(m - 1) * 9
  • 参考分析
    • 1.找出具体的位置批次
    • 2.找出对应的数字
    • 3.找出具体的字符

代码

# Python
class Solution(object):
    def findNthDigit(self, n):
        """
        :type n: int
        :rtype: int
        """
        # 边界判断
        if n == 0: return 0
        # 1.
        digit, start, count = 1, 1, 9
        while n > count:
            n -= count
            start *= 10
            digit += 1
            count = 9 * start * digit
        # 2.
        num = (start + (n - 1) // digit)
        # 3.
        return int(str(num)[(n-1) % digit])

总结

  • 根据数据规律找出具体数字后取对应字符

附录

本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情