1、题目描述
数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数,求任意第n位对应的数字。
示例 1:
- 输入:n = 3;输出:3
示例 2:
- 输入:n = 11;输出:0
限制:0 <= n < 2^31
2、代码详解
class Solution(object):
def findNthDigit(self, n):
"""
:type n: int
:rtype: int
"""
# 1)首先判断是几位数,用digits表示
print('——————求第', n, '个数字——————')
base = 9
digits = 1
while n - base * digits > 0:
n -= base*digits
base *= 10
digits += 1
# 此时,n 表示为digits位数的第n个位
print('digits:', digits, 'n:', n)
# 2)计算目标数字number
idx = n % digits
if idx == 0:
idx = digits
number = 1
for i in range(1, digits):
number *= 10
if idx == digits:
number += n//digits - 1
else:
number += n//digits
print('number:', number, ',idx:', idx)
# 3)找到number的对应位
for i in range(idx, digits):
number //= 10
return number % 10
测试用例
s = Solution()
print(s.findNthDigit(364))
print(s.findNthDigit(365))
print(s.findNthDigit(366))
print(s.findNthDigit(11))
print(s.findNthDigit(12))
测试结果
——————求第 364 个数字——————
digits: 3 n: 175
number: 158 ,idx: 1
1
——————求第 365 个数字——————
digits: 3 n: 176
number: 158 ,idx: 2
5
——————求第 366 个数字——————
digits: 3 n: 177
number: 158 ,idx: 3
8
——————求第 11 个数字——————
digits: 2 n: 2
number: 10 ,idx: 2
0
——————求第 12 个数字——————
digits: 2 n: 3
number: 11 ,idx: 1
1
参考文献