今天我们来做一道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 春招闯关活动」, 点击查看 活动详情