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

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shu-zi-xu-lie-zhong-mou-yi-wei-de-shu-zi-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

import java.util.Scanner;

class Solution {
    public int findNthDigit(int n) {
        int digitNum = 1;
        long base = 1;
        while (n > (base * 9) * digitNum) {
            n -= (base * 9) * digitNum;
            base *= 10;
            digitNum++;
        }
        int rank = n % digitNum == 0 ? n / digitNum : n / digitNum + 1;
        int num = (int) base + rank - 1;
        String numStr = String.valueOf(num);
        return (n % digitNum == 0 ? numStr.charAt(numStr.length() - 1) : numStr.charAt(n % digitNum - 1)) - '0';
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            System.out.println(new Solution().findNthDigit(in.nextInt()));
        }
    }
}
上一篇:乱码问题解决


下一篇:BeanUtils使用案例