45.数字序列中某一位的数字
数字以 0123456789101112131415… 的格式序列化到一个字符序列中。
在这个序列中,第 5 位(从 0 开始计数)是 5,第 13 位是 1,第 19 位是 4,等等。
请写一个函数求任意位对应的数字。
数据范围:
0≤ 输入数字 ≤2147483647
样例:
输入:13
输出:1
代码:
class Solution {
public int digitAtIndex(int n) {
//处理0-9的直接返回
if(n<10)return n;
//初始化数字位数(1表示个位数)
int digit = 1;
//digit位数的起始数字(1位数从1开始,2位数从10开始)
long start = 1;
//digit位数的数字总位数(1位数有9个数字,2位数有90个数字)
long count = 9;
//确定n所在的数字位数范围
//当n大于当前位数范围的总位数时,继续向更高位数查找
while(n>count){
//减去当前位数范围的总位数
n-=count;
//位数+1
digit+=1;
//起始数字*10
start*=10;
//计算新的位数范围内的总位数
count = 9*start*digit;
}
//找到具体的数字
//n-1是因为序列从0开始计数,digit得到是第几位数字
long num = start + (n-1)/digit;
//确定数字中的具体位
//(n-1)%digit计算是该数字的第几位(0表示第一位)
//将数字转为字符串后取对应位置的字符,再转为数字
return Long.toString(num).charAt((n-1)%digit)-'0';
}
}

浙公网安备 33010602011771号