1. 程式人生 > >leetcode_400. Nth Digit 查詢自然數序列中的第n個數字

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

個人感覺這個題很無聊,推導過程很繁瑣,對應中間變數多,精準度要求很高。

這個題不是我喜歡的型別。