public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型
* @return int整型
*/
public int findNthDigit (int n) {
// write code here
if(n < 0){
return -1;
}
int digits = 1;
while(true){
//digists 位 有多少个数
long numbers = countOfIntegers(digits);
if(n < numbers * digits){
return digitAtIndex(n , digits);
}
n -= digits * numbers;
digits ++;
}
//return -1;
}
private int digitAtIndex(int n ,int digits){
//属于开始的beginNumber的第几个数
long number = beginNumber(digits) + n / digits;
System.out.println("number -> "+number);
int indexFromRight = digits - n % digits;
for(int i = 1;i<indexFromRight;i++){
number /= 10;
}
return (int)(number % 10);
}
//digits位数的第一个是多少,例如1位数的开头是 0 ,二位数的开头是10,三位数是100
private long beginNumber(int digits){
if(digits == 1){
return 0 ;
}
return (long)Math.pow(10, digits -1);
}
//digits位数 有多少个数,例如一位数有10个,二位数有90个,三位数有900个
private long countOfIntegers(int digits){
if(digits == 1){
return 10;
}
long count = (int)Math.pow(10, digits - 1) ;
System.out.println("count -> "+count);
return 9 * count;
}
}