1. 程式人生 > >LeetCode-400. Nth Digit

LeetCode-400. Nth Digit

問題:https://leetcode.com/problems/nth-digit/?tab=Description
Find the nth digit of the infinite integer sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
**分析:**S1=1 S2=12 S3=123 S4=1234 … S9=123456789 S10=12345678910
S11=1234567891011 … 求在S串中的第N個數字是多少。
一位數有9個,兩位數有90個,三位數有900個。。。所以對於給定的一個數,先看它落在幾位數的範圍內,再找到具體落在哪個數字上,落在哪個數字的哪一位上。例如n=140,因為一位數有9個,可以位數加1,n-9=131。兩位有90個,2*90=180>131,所以目標數字是兩位的。10+(131-1)/2=75,落在75上。(131-1)%2=0,落在75的第0位,即7。如此得到。
C++程式碼:

class Solution {
public:
    int findNthDigit(int n) {
        long digit = 1, ith = 1, base = 9;  
        while(n > base*digit)  
        {  
            n -= base*(digit++);  
            ith += base;  
            base *= 10;  
        }  
        return to_string(ith+(n-1)/digit)[(n-1)%digit]-'0'
; } };