Leetcode 400. 第 N 位数字
1.题目基本信息
1.1.题目描述
给你一个整数 n ,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...] 中找出并返回第 n 位上的数字。
1.2.题目地址
https://leetcode.cn/problems/nth-digit/description/
2.解题方法
2.1.解题思路
数位+找规律。记digit为数位,即某个数中数字的个数;1-9共有9个数,10-99共90个数,100-999共900个数,找规律可知数位为digit的数共有10*(digit-1)9个;所以可以从小到大枚举digit,将总数个数在n内的数位排除,找到目标数的digit,并找出目标数以及最终数字在目标数中位置
3.解题代码
python代码
class Solution:
def findNthDigit(self, n: int) -> int:
# 思路:数位+找规律。记digit为数位,即某个数中数字的个数;1-9共有9个数,10-99共90个数,100-999共900个数,找规律可知数位为digit的数共有10**(digit-1)*9个;所以可以从小到大枚举digit,将总数个数在n内的数位排除,找到目标数的digit,并找出目标数以及最终数字在目标数中位置
digit = 1
remain = n
cnt = 10 ** (digit - 1) * 9
while digit * cnt < remain:
remain -= digit * cnt
digit += 1
cnt = 10 ** (digit - 1) * 9
# print(remain, digit)
start = 10 ** (digit - 1)
num = start + (remain - 1) // digit
index = (remain - 1) % digit
return int(str(num)[index])
4.执行结果


浙公网安备 33010602011771号