Leetcode 400.Nth Digit

關關的刷題日記發表於2018-01-09

題目的意思是給定一串無窮大的正整數,讓我們找出第n個數字是多少。

 

思路:我們可以把這些數字寫出來找下規律,每個數由一個數字構成的數有9個,每個數由2個數字構成的數有90個,每個數由3個數字構成的數有900個,每個數由n個數字構成的數有9*10^(n-1)個。我們首先要找出第n個數字落在幾位數上,然後找到具體落在哪個數上,然後找到落到這個數的第幾位上,最後鎖定是哪一個數字。每一步都需要細心耐心。

class Solution {
public:
    int findNthDigit(int m) {
        int digit=1,flag;
        long c=1, target=0, n=m;
        //求出數字n落在digit位數上
        while(n>0)
        {
            n-=c*digit*9;
            digit++;
            c*=10;
        }
        
        //求出數字n是digit位數的第幾個數字
        n+=(--digit)*(c/10)*9;
        
        //求出數字n是落在哪一個數上
        target=(n-1)/digit+c/10;  //
        
        //求出數字n是落在target左數第flag個數字上
        flag=(n-1)%digit+1;
        
        //求出target的右數第digit-flag+1數字
        return target/(int)pow(10,digit-flag)%10;       
    }
};


相關文章