天天看點

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])