数学分析:
小于10,1-9,9个数字,9 位
小于100,10-99,90个数字,180位
小于1000,100-999,900个数字,2700位
各个区间的上下线[0,10),[10,100),[100,1000) 位数是1,2,3。。。
解题步骤:
- 先确定第n个数在哪个区间内;
- 再确定这个数属于哪个自然数;
- 最后所在自然数得出数字;
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型
* @return int整型
*/
int findNthDigit(int n) {
int digitCont = 1; //位数
int start = 1; //区间下限
long count = 9; //区间位数
while(n > count){
n -= count;
digitCont++;
start *= 10;
count = start * digitCont * 9;
}
int num = (n - 1) / digitCont + start; //num表示n所在的数字
stack<int> s;
while(num != 0){
s.push(num % 10);
num /= 10;
}
int r = (n - 1) % digitCont; //r表示n所在数字中的位置
while(r != 0){
r--;
s.pop();
}
return s.top();
}
};