题意
找出序列中的第n位数位是什么:1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11…
思路
- 先找出第n个数位所在的段:[1, 9], [10, 99], [100, 999], …这样分段
- 找出第n个数位属于那一个段中的哪一个数字
- 找出第n个数位属于那个数字的第k位并且返回第k位
代码
class Solution {
public:
int findNthDigit(int n) {
long long s = 0;
int x1 = 9, x2 = 1, k = 0;
while (1) {
long long ss = s + (long long) x1 * x2;
if (n >= s && n < ss) {k = x2; break;}
x1 *= 10;
x2++;
s = ss;
}
n -= s;
int pos = n % k;
n /= k;
if (pos) n++;
int x = pow(10, k - 1) + n - 1;
string sx = to_string(x);
return (pos ? sx[pos - 1] : sx[sx.size() - 1]) - '0';
}
};