leetcode [面试题44] 数字序列中某一位的数字
Contact me:
Blog -> https://cugtyt.github.io/blog/index
Email -> cugtyt@qq.com
GitHub -> Cugtyt@GitHub
数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。
请写一个函数,求任意第n位对应的数字。
示例 1:
输入:n = 3
输出:3
示例 2:
输入:n = 11
输出:0
限制:
0 <= n < 2^31
思路,考虑到0-9特殊处理,10-99,9*10*2个数字,100-999,9*100*3个数字,把n依次减去这些数字得到新n,n//位数表示第多少个数字,n%位数表示该数字第多少位。
class Solution:
def findNthDigit(self, n: int) -> int:
if n < 10: return n
else:
n -= 10
leng = 2
while n >= 9 * 10**(leng - 1) * leng:
n -= 9 * 10**(leng - 1) * leng
leng += 1
a = (n // leng) + 10**(leng - 1)
b = leng - n % leng - 1
while b:
a //= 10
b -= 1
return a % 10