在无限的整数序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …中找到第 n 个数字。
注意:
n 是正数且在32为整形范围内 ( n < 231)。
示例 1:
输入:
3
输出:
3
示例 2:
输入:
11
输出:
0
说明:
第11个数字在序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, … 里是0,它是10的一部分。
将整数序列划分为下列区间:
1 1-9
2 10-99
3 100-999
4 1000-9999
5 10000-99999
6 100000-999999
7 1000000-9999999
8 10000000-99999999
9 100000000-99999999
class Solution {
public:
int findNthDigit(int n) {
int len = 1, base = 1;
while(n>9L*base*len){
n -= 9*base*len;
len++;
base *= 10;
}
int curNum = (n-1)/len + base, digit = 0;
for(int i=(n-1)%len;i<len;++i){
digit = curNum%10;
curNum /= 10;
}
return digit;
}
};