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;
    }
}