题目
数字以0123456789101112131415…
的格式序列化到一个字符序列中。在这个序列中,第5位(从0开始计数,即从第0位开始)是5,第13位是1,第19位是4,等等。请写一个函数,求任意第n位对应的数字。
解题思路
- 可以将 n 进行拆分,1位数一共10个数字、10位,2位数一共90个数字、180位,依此类推
- 当确定 n 所在位数范围时,对位数取商,计算出 n 位对应的数字 a,再取余,计算出结果位于 a 的第几位
public int nOfNumberSerialize(int n) {
int i = 1;
int count = 0;
int nLeft = n;
while (true) {
nLeft -= count;
count = countOfIntegers(i) * i;
if (nLeft < count) {
break;
}
i++;
}
int a = nLeft / i;
String s = String.valueOf(a);
return s.charAt(nLeft % i) - '0';
}
private int countOfIntegers(int n) {
int sum = 0;
if (n == 1) {
sum = 10;
} else {
sum = (int) (9 * Math.pow(10, n - 1));
}
return sum;
}