问题描述:
Find the nth digit of the infinite integer sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...
Note:
n is positive and will fit within the range of a 32-bit signed integer (n < 231).
示例:
Input: 3 Output: 3
Input: 11 Output: 0 Explanation: The 11th digit of the sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... is a 0, which is part of the number 10.
问题分析:
可分为以下三个步骤求解:
1.计算第n个digit在什么数范围内
2.把这个数(number)求解出来
3.具体求出是这个数(number)中的哪一位数字
过程详见代码:
class Solution {
public:
int findNthDigit(int n) {
long base = 9, digits = 1;
while (n - base * digits > 0)
{
n -= base * digits;
base *= 10;
digits ++;
}
int index = n % digits;
if (index == 0)
index = digits;
long num = 1;
for (int i = 1; i < digits; i ++)
num *= 10;
num += (index == digits) ? n / digits - 1 : n / digits;
for (int i = index; i < digits; i ++)
num /= 10;
return num % 10;
}
};