算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
今天和大家聊的问题叫做 第 N 位数字,我们先来看题面:​https://leetcode-cn.com/problems/nth-digit/​
Given an integer n, return the nth digit of the infinite integer sequence [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...].


在无限的整数序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...中找到第 n 位数字。

示例


示例 1:
输入:3
输出:3
示例 2:
输入:11
输出:0


解题


观察数字规律可知:一位数共有:1*9 = 9*1*10^0两位数共有:2*90= 9*2*10^1三位数共有:3*900=9*3*10^2m 位数共有:9*m*10^{m-1}

由此可获得第 n 位数字属于哪个分段,即可知 m 的值。由 (n-1)//m 可获得第 n 位数字所属于数值,在该分段所有数值列表的下标。例如 3 在一位数分段的下标为 2;11 在两位数分段的下标为 0。分段的起始数值为 10^{m-1},则第 n 位数字所属数值为 num=10^{m-1}+(n-1)//m。第 n 位数字在数值 num 中的下标为 (n-1)\%m,由此可知第 n 位数字。

class Solution:
def findNthDigit(self, n: int) -> int:
m,stage=1,9
while n>stage:
n=n-stage
m=m+1
stage=9*m*(10**(m-1))
num=10**(m-1)+(n-1)//m
index=(n-1)%m
return int(str(num)[index])


好了,今天的文章就到这里,如果觉得有所收获, 

 ​

 ​


​LeetCode刷题实战400:第 N 位数字_字典序