Find the nth digit of the infinite integer sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...
Note:
n is positive and will fit within the range of a 32-bit signed integer (n < 231).
Example 1:
Input:
3
Output:
3
Example 2:
Input:
11
Output:
0
Explanation:
The 11th digit of the sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... is a 0, which is part of the number 10.
思路:可视化,发现
1~9 1位 9个数(9-1+1), 1*9 digit
10~99 2位 90个数(99-10+1), 2*90 digit
100~999 3位 900个数(999-100+1), 3*900 digit
这是有规律的事情,那么找第n个digit,那么首先得确定是在哪个len区间,然后在这个区间内找第几个数,然后再找这个数的第几位就行了。
start是用来记录每个区间的第一个数。首先循环减去每个区间,然后len递增,start*10,count*10.
// n - 1是为了从1开始的index,转换成0开始的index;也就是第一个数,相当于是第0 index个;
// (n - 1)/ len,相当于是0 index array里面的index;start就是index 0的数字;
class Solution {
public int findNthDigit(int n) {
long base = 9; // 注意base要用long,否则会溢出;
int start = 1;
int len = 1;
while(n > len * base) {
n -= len * base;
len++;
start *= 10;
base *= 10;
}
// n - 1是为了从1开始的index,转换成0开始的index;也就是第一个数,相当于是第0 index个;
// (n - 1)/ len,相当于是0 index array里面的index;start就是index 0的数字;
int target = start + (n - 1)/len;
return String.valueOf(target).charAt((n - 1) % len) - '0';
}
}