这就是简单数学题。先确定数字的index对应几位数,再利用推导出来的公式带入计算。
class Solution {
public:
int findNthDigit(int n) {
//get range
int numSize=1;
int low=1;
int high=9*pow(10,numSize-1)*numSize;
while(1)
{
if(n>=low&&n<=high)
break;
numSize++;
low=high+1;
if(high>=INT_MAX-9*pow(10,numSize-1)*numSize)
{
high=INT_MAX;
break;
}
else
high=high+9*pow(10,numSize-1)*numSize;
}
//cout<<numSize<<endl;
//cout<<(n-low)%numSize<<endl;
if((n-low)%numSize==0)
return ((n-low)/(numSize*pow(10,numSize-1)))+1;
else
return ((int)((n-low)/(numSize*pow(10,numSize-1-((n-low)%numSize))))%10);
}
};