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).
Example 1:
Input: 3 Output: 3
Example 2:
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.本题思路很简单,就是去找规律,一位数,数字个数9,两位数,数字个数90,三位数数字个数900。。。需要判断出n在哪一个区间,同时需要小心的是要用long long型,否则,int型后期会溢出变为负数的,为了这个错误纠结了很久,不应该啊!!1
class Solution {
public:
int findNthDigit(int n) {
long long a=9;
long long b=1;
long long c=a;
long long t;
long long res;
if(n<10) return n;
while(n>c){
a *= 10;
b++;
c += a*b;
}
c -= a*b;
if((n-c)%b){
t = (n-c)/b + pow(10,b-1);
res = (n-c)%b;
}else{
t = (n-c)/b + int(pow(10,b-1))-1;
res=b;
}
for(int i=0;i<b-res;i++){
t/=10;
}
return t%10;
}
};