题目描述
数字以0123456789101112131415…的格式序列化到一个字符序列中。
在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。
请写一个函数,求任意第n位对应的数字。
样例
输入:13
输出:1
数字长度(size) | 范围 [left, right] | 个数(cnt) | 区间长度(len) |
---|---|---|---|
1 | [1, 9] | 9 | 9 |
2 | [10, 99] | 90 | 180 |
3 | [100, 999] | 900 | 2700 |
C++ 代码
class Solution {
public:
int digitAtIndex(int n) {
int size = 1, left = 1;
for (long len = 9, cnt = 9;n > len; ) {
n -= len;
cnt *= 10;
left *= 10;
++size;
len = cnt * size;
}
int number = left + (n - 1) / size, idx = (n - 1) % size;
return to_string(number)[idx] - '0';
}
};