算法1
$log(n)$
直接减去之前的区间(这个做法可以少维护几个变量),得到位数$len$
此时区间开始的第一个数是 $10^{len - 1}$, 然后就是一个类似int a[] 数组地址取数字
C++ 代码
class Solution {
public:
int digitAtIndex(int n) {
long long cum = 1;
long long len = 1;
long long nums = 9;
n -= 1;
while (1) {
if (n - nums * len >= 0) {
n -= nums * len;
}
else {
break;
}
len += 1;
nums *= 10;
}
long long val = pow(10, len - 1) + n / len;
string tmp = to_string(val);
return tmp[n % len] - '0';
}
};