第三題:數字序列中某一位的數字

題目描述:

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

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

思路分析:這是一個典型的找規律的題目,仔細分析可得到以下規律(先不考慮第一個0)

          於是求解過程由三步組成:

                       1、 確定 n 所在 數字 的 位數 ,記爲 digit;
                       2、 確定 n 所在的 數字 ,記爲 num;
                       3、 確定 n 是 num中的哪一數位,並返回結果。

代碼實現:

public static int findNthDigit(int n) {
        if(n == 0)
            return 0;

        int digit = 1;
        long start = 1;
        long count = 9;
        while (n > count) { // 1.確定 n 所在數字的位數
            n -= count;
            digit += 1;
            start *= 10;
            count = digit * start * 9;
        }

        long num = start + (n - 1) / digit; // 2.確定 n 所在的數字

        return Long.toString(num).charAt((n - 1) % digit) - '0'; // 3.確定 n 是所在數字的第幾位


    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章