0400. Nth Digit

0400. Nth Digit #

题目 #

  • 给你一个整数 n ,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...] 中找出并返回第 n 位上的数字。

模拟 #

代码 #

模拟 #

class Solution {
    public int findNthDigit(int n) {
        /**
         * 1位数有9个
         * 2位数有10~99 共90个
         * 3位数有100~999 共900个
         * 4位数有1000~9999 共9000个
         */
        /**
         * 1. 首先确定第n位数所对应的数字是k位数
         * 2. 然后确定第n位数中第i个数字
         * 3. 对这个数字分解各数位, 然后返回
         */
        int sum = 0, k = 0;
        while (sum < n) {
            k++;
            sum += 9 * Math.pow(10, k-1) * k;
        }
        for (int i = 1; i < k; i++) {
            n -= 9 * Math.pow(10, i-1) * i;
        }
        int num = (int)Math.pow(10, k-1);
        while (n > k) {
            n -= k;
            num++;
        }
        System.out.println("n = " + n);
        if (n == 0) {
            int[] bits = new int[k]; int ptr = k-1, z = num-1;
            while (z > 0) {
                bits[ptr--] = z % 10;
                z /= 10;
            }
            return bits[k-1];
        }
        int[] bits = new int[k]; int ptr = k-1;
        while (num > 0) {
            bits[ptr--] = num % 10;
            num /= 10;
        }
        return bits[n-1];
    }
}

致谢 #

宫水三叶