leetcode_400. Nth Digit 查詢自然數序列中的第n個數字
題目:
Find the nth digit of the infinite integer sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...
Note:
n is positive and will fit within the range of a 32-bit signed integer (n < 231).
Example 1:
Input: 3 Output: 3
Example 2:
Input: 11 Output: 0 Explanation: The 11th digit of the sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... is a 0, which is part of the number 10.
題意:
在自然數的序列1,2,3,4,5,……中,給定數字n,寫一個函式,返回這個序列的第n個數字
程式碼:
class Solution(object):
def findNthDigit(self, n):
"""
:type n: int
:rtype: int
"""
if n > 0 :
k = 1 #k:記錄n對應的數字的位數
while n > k*9*10**(k-1) :
n -= k*9*10**(k-1)
k += 1
if n%k == 0 : #t:記錄n為第k位上的第幾個數
t = n/k
else :
t = n/k + 1
num = 10**(k-1) + t -1 #num:記錄n對應的十進位制數
temp = n-(t-1)*k #temp:記錄n對應十進位制數num上的第幾個數字
num_list = [] #將num各個數字分解到num_list中
while num/10 > 0 :
num_list.append(num%10)
num = num/10
num_list.append(num)
num_list = num_list[::-1]
return num_list[temp-1] #返回num中的第temp個數字
筆記:
思路:根據自然數中各個數的數字長度規律,由n推匯出n對應自然數序列中的哪個數,以及這個數中的哪個數字,然後將這個數字返回
自然數序列中各個數的數字分佈:
1-9: 1*9
10-99: 2*90
100-999: 3*900
個人感覺這個題很無聊,推導過程很繁瑣,對應中間變數多,精準度要求很高。
這個題不是我喜歡的型別。