题目描述
题解
class Solution {
public int findNthDigit(int n) {
if(n == 0) return 0; // 第 0位即第一个数字 0
int digit = 1; // n所在数字的位数,初始化为 1位数
long start = 1; // 每 digit位数的起始数字(即1,10,100,1000,...),初始化为 1
long count = 9*start*digit; // 所有 digit位数的数位总量(如两位数总共有9*10=90个数,数位总量为9*10*2 = 180)
while(n > count) { // 确定 n所在数字的位数
n -= count; // 循环执行 n减去所有一位数、两位数、... 的数位数量 count,直至 n≤count时跳出,说明找到了 n属于几位数中。
digit += 1; // 1,2,3,...
start *= 10; // 1,10,100,...
count = 9*start*digit; // 9, 180, 2700,...
}
long num = start + (n-1)/digit; // 确定 n所在的数字
return Long.toString(num).charAt((n-1)%digit) - '0'; // 确定 n位于该数字 num中的哪一位,直接返回该位上的数字即可(每个数字的首个数位为第 0位),这里先将数字转为字符串,然后取 n所在数位上的字符,减去字符‘0’即可知道是哪个数字了,因为两个字符相减得到的是int型
}
}