数字序列中某一位的数字

数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。

请写一个函数,求任意第n位对应的数字。

示例 1:

输入:n = 3
输出:3

示例 2:

输入:n = 11
输出:0

限制:

  • 0 <= n < 2^31

找规律 ,限定范围

要用long

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

/**
* 首先,我们要明确的是,n是下标,从0开始的!
* 我们可以注意到规律 0~9有10个数字,10~99有90个数字,100~999有900个数字,so~
* @param n
* @return
*/
public int findNthDigit(int n){
if (n < 10) {
return n;
}
//先找一下,在哪个数位范围。要用long
long target = 9;
int i = 1;
while (n - target*i > 0) {
n = (int) (n - target*i);
i = i + 1;
target = target * 10;
}
//找到了在i位里面
long start = (int) Math.pow(10, i-1);
System.out.println(start);
//还剩下n个数字,接下来就是每个数字都是i位了
int count = (n-1) / i;//有几个数字,从0开始的,n-1

//目标数
long num = start + count;

//所求数位为数字 numnum 的第 (n - 1) \% digit(n−1)%digit 位
return String.valueOf(num).charAt((n - 1) % i) - '0';
}