今天的每日一题与昨天的类似,所以又做了一道题。这种题只能死记硬背,临场找规律太难了。。。
解题思路
通过观察可以发现
0-9 有10个数字
10-99 有 180= 1092个数字
100-999有2700 = 10093个数字
1000-9999有 36000 = 100094个数字
。。。
依此类推
所以可以由此判断,当n<=9时,可以直接返回n;
9<n<=99时,先使用9 + (n-9)/2,从而可以知道n为10-99中的第几个数字,得到该数字num后,使用(n-9)%2判断是该数字的第几位,将num转为字符串,然后获取num[(n-9)%2] - '0’的值即可;
。。。
依次类推
可以得到如下的代码(搬运大佬的代码,找到规律了,写不出来。。。太菜了,大佬代码链接)
代码
class Solution {
public int findNthDigit(int n) {
int digit = 1;
long start = 1;
long count = 9;
while (n > count) {
n -= count;
digit += 1;
start *= 10;
count = digit * start * 9;
}
long num = start + (n - 1) / digit;
return Long.toString(num).charAt((n - 1) % digit) - '0';
}
}