1.题目

2.思路
(1)1位数 1~9,9个数,总位数19=9
(2)2位数,10~99,90个数,总位数2 90=180
(3)3位数,100~999,900个数,总位数3*900=2700
d当前遍历到的位数,count当前位数下的所有整数的位数之和。
初始时 d=1,count=9。每次将 n 减去 d×count。
然后将 d 加 1,将 count 乘以 10,直到 n≤d×count。
此时的 d 是目标数字所在整数的位数,n 是所有 d 位数中从第一位到目标数字的位数。
3.代码实现
java
class Solution {
public int findNthDigit(int n) {
int d=1;//代表当前是一位数
int cnt=9;
if(n<=9)
{
return n;
}
while(n>(long)d*cnt)//如果n>9的话
{
n=n-d*cnt;
d++;//位数+1
cnt=cnt*10;//当前范围内的数字个数*10
}
int index=n-1;
//Math.pow(a, b):是 Java 中 java.lang.Math 类提供的静态方法,用于计算 a 的 b 次幂(即 a^b),返回值为 double 类型。
int begin=(int)Math.pow(10,d-1);
int num=begin+index/d;
int digitIndex=index%d;
int digit=(num/(int)(Math.pow(10,d-digitIndex-1)))%10;
return digit;
}
}