问题分析
我们查找数位的方式是首先确定是第几个数字n
,然后是确定n
的第几位。
有一般规律可得,
1位数字的个数为10 - 1
个数字,其所占数位为(10 - 1) * 1
2位数字的个数为100 - 10
个数字,所占数位为(100 - 10) * 10
。
以此类推,我们可以利用这种方式快速确定数n
。
完整代码
class Solution {
public:
int nthDigitInNum(int num, int n){
vector<int> digit;
while(num != 0){
digit.push_back(num % 10);
num /= 10;
}
return digit[digit.size() - n - 1];
}
int findNthDigit(int n) {
int digitNum{1};
while((pow(10, digitNum) - pow(10, digitNum - 1)) * digitNum < n){
n -= (pow(10, digitNum) - pow(10, digitNum - 1)) * digitNum;
digitNum++;
}
int nn = pow(10, digitNum - 1) + (n - 1) / digitNum;
return nthDigitInNum(nn, (n - 1) % digitNum);
}
};