题目描述
给你一个整数 n ,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …] 中找出并返回第 n 位上的数字。
示例 1:
输入:n = 3
输出:3
示例 2:
输入:n = 11
输出:0
解释:第 11 位数字在序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... 里是 0 ,它是 10 的一部分。
提示:
- 1 <= n <= 231 - 1
- 第 n 位上的数字是按计数单位(digit)从前往后数的第 n 个数,参见 示例 2 。
题解思路
由于题目需要求得是第n位数字
我们推理可以得知 一位数一共有9个数 二位数有2 * 90个数 三位数有3 * 900个数 四位数有4 * 9000个数
- 以此类推n位数则一共有n * 9 * 10**(n-1)
- 因此我们可以通过计算出n属于几位数 然后几位数的第几位
例:
- n=300 则 9+180<300 而300-9-180<270 则说明n是属于三位数
- 而且n是三位数里的第300-9-180=111位数字 换成从零开始坐标 则是111-1=110
- 三位数字每三位一个数 则110//3=36 那么则是三位数字里的36
- 我们知道是136之后还要继续判断 是136的第几位 这时我们110%3=2 则说明是136的第二位
- 因此返回n=6
题解代码
class Solution:
def findNthDigit(self, n: int) -> int:
cur,base=1,9
while n>cur*base:
n-=cur*base
cur+=1
base*=10
#换算成从0开始的坐标
n-=1
#找到三位数
num=10**(cur-1)+n//cur
#找到是三位数的第几位
ind=n%cur
return num//(10**(cur-1-ind))%10
题目来源
https://leetcode-cn.com/problems/nth-digit/