剑指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 ;
    }
}
posted @   依嘫  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示