算法步骤
-
先算出n是第几位数中的
-
算出n是第几位数中的哪一个数
-
算出n是这个数中的哪一位,就是我们要的答案
1:通过找规律可以发现一位数有1 * 9个数字,二位数有2 * 90个数字,三位数有 3 * 900个数字....依次类推
我们只要找到 n > 0的最小整数就可以知道第几位了;
2:第二步也是通过找规律得出,把题目的例子一个一个带进去试,就可以发现 第几位数是 100…开始的第 n / i - 1个
(向上取整,公式:a/b = (a + b - 1)/ b)
3:通过 n % b可以知道是这个数的第几个,特别的,如果 n % b == 0,那么是这个数的最后一位;否则的话就是 n % b
java代码
class Solution {
public int digitAtIndex(int n) {
long s = 9, start = 1;
int i = 1; //s表示每一位有多少数,start表示每一位是从几开始的
while(n > s * i) //求出n是几位数中的
{
n = (int)(n - s * i);
i ++;
s *= 10;
start *= 10;
}
long num = start + (n + i - 1) / i - 1; //求出n是几位数中的哪个数,因为考虑0,所以要减1
int r = (n % i == 0 ? i : n % i); //求出是num中的哪一位
for(int j = 0; j < i - r; j ++) num /= 10;
return (int)num % 10;
}
}