天天看点

leetcode(力扣) 400. 第 N 位数字 (数学规律)

文章目录

  • ​​题目描述:​​
  • ​​思路分析:​​
  • ​​完整代码:​​

题目描述:

给你一个整数 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 的一部分。

思路分析:

这道题暴力过不去啊~ 我上来直接用的暴力,从0开始数,这道题的数量级非常大​

​1 <= n <= 231 - 1​

​ 暴力直接超时了。

完整代码:

class Solution:
    def findNthDigit(self, n: int) -> int:
        base = 9
        base_wei = 1  # 表示位数
        while n > base_wei * base:
            n -= base * base_wei
            base *= 10
            base_wei +=1
        n -=1
        temp =  n //base_wei
        # 数字
        num = 10  **  (base_wei-1) + temp
        # 看看要的是该数字的第几位
        index_num =  n % base_wei
        return int(str(num)[index_num])