在无限的整数序列 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的一部分。
思路:暴力解会超时,使用查表法
int findNthDigit(int n){
int buf[10] = {0,9,180,2700,36000,450000,5400000,63000000,720000000,2147483647};
char ret[11];
int i;
for(i = 1; i < 10; i++) {
if(n <= buf[i]) {
int c = pow(10, i - 1) + (n - 1) / i;
int y = (n - 1) % i;
sprintf(ret,"%d",c);
return ret[y]-'0';
} else {
n -= buf[i];
}
}
return -1;
}