在无限的整数序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …中找到第 n 位数字
class Solution {
public:
int findNthDigit(int n) {
long digits = 1,base = 9;
while(n - digits * base > 0)
{
n -= digits * base;
digits ++;
base *= 10;
}
//表示第idx位
int idx = n % digits;
//当 idx == 0 表示n在末尾,例如第11个数:
//digits = 2,n = 2,n / digits = 1 ,
//number不可以表示下一个数
if (idx == 0)idx = digits;
long number = 1;
for(int i = 1;i < digits;i ++) number *= 10;
number += (idx == digits)? n/digits - 1:n/digits;
for(int i = idx;i < digits;i ++) number /= 10;
return number % 10;
}
};