题目:
数字以01234567891011121314…的格式序列化到一个字符序列中,第5位(从0开始计数)是5,第13位是1,等等。求任意第n位对应的数字
思路:
public int func(int index) {
if (index < 0)
return -1;
int digits = 1;//数字的位数
while (true) {
//求位数为digits的数字共有多少个
int numbers = countOfIntegers(digits);
if (index < numbers * digits) {
return digitAtIndex(index, digits);
}
index -= digits * numbers;
digits++;
}
}
private int digitAtIndex(int index, int digits) {
//找到目标数字
int numbers = beginNumber(digits) + index / digits;
//找第几位是所求
int indexFromRight = digits - index % digits;
for (int i = 1; i < indexFromRight; i++) {
numbers /= 10;
}
return numbers % 10;
}
//求位数为digits的第一个数字是?
private int beginNumber(int digits) {
if (digits == 1) {
return 0;
}
return (int) Math.pow(10, digits - 1);
}
//求位数为digits的数字共有多少个
private int countOfIntegers(int digits) {
if (digits == 1)
return 10;
int count = (int) Math.pow(10, digits - 1);
return 9 * count;
}