[44]数字序列中某一位的数字
题目
数字以0123456789101112131415…的格式序列化到一个字符序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等。
请写一个函数求任意位对应的数字。
输入 :13
输出:1
思路
0—9 10个1位数
10—99 90个2位数
100-999 900个3位数
- 确定是几位数 n-10-90*2…
- 确定第几位 /
- 具体数的第几个 %
代码
class Solution {
public:
int digitAtIndex(int n)
{
if(n<=0) return 0;
long long i=1; // 是几位数
long long s=9; // i位数 一共有多少个数值 9 ,90 ,900,
long long base=1; // i位数 开始的数值 1, 10 , 100
while(n>i*s)
{
n -= i*s;
i++;
s *=10;
base *=10;
}
// 计算目标是那个数
int num = base + (n-1)/i;
for(int j=(n-1)%i;j<i-1;j++) num /= 10; // 找到具体位置
return num%10;
}
};