題目描述:
數字以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 是所在數字的第幾位 }