剑指offer 57. 数字序列中某一位的数字-java
57. 数字序列中某一位的数字
原题链接
数字以 0123456789101112131415… 的格式序列化到一个字符序列中。
在这个序列中,第 5 位(从 0 开始计数)是 5,第 13 位是 1,第 19 位是 4,等等。
请写一个函数求任意位对应的数字。
数据范围
0≤ 输入数字 ≤2147483647
代码案例:输入:13
输出:1
题解
class Solution {
public int digitAtIndex(int n) {
//第一步 知道n是几位数 如第1001
long i = 1 ,s = 9 , base = 1;//i位数,s个,i位数的起点
while(n > i * s){
n -= i*s;
i++;
s *=10;
base *=10;
}
//第二步知道是几位数中的第几个数如370 此时这里面的n = 1001-9-180 = 812
long num = base + (n + i - 1) / i - 1;//(n + i - 1) / i - 1为n/i向上取整的意思 (1001 - 9 - 180)/ 3
//知道是第几个数的第几个 如370的第二个为7
long res = n % i == 0 ? i : n % i ;//为0 的话指的是这位数的最后一位
for(int j = 1 ; j <= i - res ; j++){
num /= 10 ;
}
return (int) num % 10 ;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)