一、题目
数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数,求任意第n位对应的数字。
示例 1:
输入:n = 3 输出:3
示例 2:
输入:n = 11 输出:0
限制:
0 <= n < 2^31
二、思路
1、将10111212...中的每一位称为数位,记为n;
2、将10、11、12....中的每一位称为数字,即为num;
3、10是一个两位数、所以位数是2,记为digit;
4、每digit的起始位置记为start,即(1、10,100.....);
5、字符个数记为count;
得到一个公式:
count = 9 * start * digit;
所以要求第n位的值可分位3步:
- 确定n所在位置数字的位数--digit;
- 确定n所在位置的数字---num;
- 确定n是num的哪一位;返回即可;
三、代码
class Solution { public int findNthDigit(int n) { if(n ==0 ){ return 0; } int digit = 1; long start = 1; long count = 9; // 1、确定位数 while (n > count) { n -= count; digit += 1; start *= 10; count = digit * start * 9; } // 2、确定在那个区间的那个数字 long num = start + (n - 1) / digit; // 3、确定这个数字的数位/字符 int index = (n-1) % digit + 1; return (int)(num/Math.pow(10,digit-index))%10; } }