class Solution {
public int findNthDigit(int n) {
/**
* 1位数有9个
* 2位数有10~99 共90个
* 3位数有100~999 共900个
* 4位数有1000~9999 共9000个
*/
/**
* 1. 首先确定第n位数所对应的数字是k位数
* 2. 然后确定第n位数中第i个数字
* 3. 对这个数字分解各数位, 然后返回
*/
int sum = 0, k = 0;
while (sum < n) {
k++;
sum += 9 * Math.pow(10, k-1) * k;
}
for (int i = 1; i < k; i++) {
n -= 9 * Math.pow(10, i-1) * i;
}
int num = (int)Math.pow(10, k-1);
while (n > k) {
n -= k;
num++;
}
System.out.println("n = " + n);
if (n == 0) {
int[] bits = new int[k]; int ptr = k-1, z = num-1;
while (z > 0) {
bits[ptr--] = z % 10;
z /= 10;
}
return bits[k-1];
}
int[] bits = new int[k]; int ptr = k-1;
while (num > 0) {
bits[ptr--] = num % 10;
num /= 10;
}
return bits[n-1];
}
}