题目描述:
数字以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 是所在数字的第几位 }