劍指 Offer 44. 數字序列中某一位的數字

小橋落花流水發表於2021-01-03

劍指 Offer 44. 數字序列中某一位的數字

數字以0123456789101112131415…的格式序列化到一個字元序列中。在這個序列中,第5位(從下標0開始計數)是5,第13位是1,第19位是4,等等。

請寫一個函式,求任意第n位對應的數字。

 

示例 1:

輸入:n = 3
輸出:3


示例 2:

輸入:n = 11
輸出:0
 

限制:

0 <= n < 2^31


基本思路:分別找到1位,2位,3位數……的個數規律,10,90,900,9000

    int findNthDigit(int n) {
        if(n<10)
            return n;
        
        long base=1,count=9;
        int  k=1;
        while(n>count){
            n-=count;
            k++;
            base=base*10;
            count=k*base*9;
        }

        return to_string(base+(n-1)/k)[(n-1)%k]-'0';  //n-1,是因為是從base開始的

    }

 

相關文章