https://leetcode.cn/problems/shu-zi-xu-lie-zhong-mou-yi-wei-de-shu-zi-lcof/
数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。
请写一个函数,求任意第n位对应的数字。
示例 1:
输入:n = 3
输出:3
示例 2:
输入:n = 11
输出:0
思路:可以先确定当前的n处于哪个位数的数值,3位还是4位还是啥,
然后求出<=当前n对应的数值,判断余数是否为0,如果不为0当前数值要+1
class Solution {
public:
int findNthDigit(int n) {
if(n<10)return n;
long digits=0;//表示的是9,99,999,9999每一种位数对应的数值个数
int num=0;//num就表示当前的位数
while(n>digits){
digits+=(num+1)*9*pow(10.0,num++);
}
//下面相当于把digits回复到比n小的位数的数值
digits-=num*9*pow(10.0,num-1);
n-=digits;
//t为n当前对应的数值的大小
int t=pow(10.0,num-1)+n/num-1,val=n%num;
if(val==0)return t%10;
t++;//余数大于0说明当前数值应该是t+1;
t/=pow(10.0,num-val);
return t%10;
}
};