剑指 Offer 44. 数字序列中某一位的数字

181 阅读1分钟

数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。

请写一个函数,求任意第n位对应的数字。

示例 1:

输入:n = 3
输出:3
示例 2:

输入:n = 11
输出:0

限制:

0 <= n < 2^31

按照大佬的思路写的,就不是人做的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

class Solution {
    public int findNthDigit(int n) {
        long i = 1;
        long digit = (int) Math.pow(10, i - 1);
        long number = 9 * digit * i;
        while (number < n) {
            i = i + 1;
            number = number + 9 * (int) Math.pow(10, i - 1) * i;
        }
        number = number - 9 * (int) Math.pow(10, i - 1) * i;
        long res = n - number;
        long temp = (int) Math.pow(10, i - 1) + res / i;
        long tmp = res % i;
        if (tmp == 0) return (int) ((temp-1) % 10);
        return Integer.parseInt(String.valueOf(temp).substring((int)tmp - 1, (int)tmp));



    }
}

在这里插入图片描述