Nth Digit

https://leetcode.com/problems/nth-digit/description/

Find the nth digit of the infinite integer sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...

Thoughts

可以观察到前10个数是一位的, 前100个数是两位的...如果依次遍历下去, 我们就可以知道n是几位的. 知道了是几位的, 让n把前面的位数所占的count抛去后, 让(n - 1) / len就可以知道n对应的num是多少, 让(n - 1) % len就知道是在num中的第几位. 取n - 1而不是n的原因在于index是从1开始的, 即第一个数时n = 1而不是 0. 比如len = 2时, num = 10是起始, 这时n = 1 指向10中的1. 对于n = 2, 如果是n / len 则等于1, num + 1 = 11而不是10. 同样n =2 时n % len = 0, 而不是应该得到的1.

Code

class Solution {
    public int findNthDigit(int n) {
        long count = 9;
        int len = 1;
        int num = 1;
        while(len * count < n) {
            n -= len * count;
            count *= 10;
            len++;
            num *= 10;
        }

        num += (n - 1) / len;
        String s = Integer.toString(num);

        return s.charAt((n - 1) % len) - '0';
    }
}

Analysis

Errors: 1. 长度为2的10~99有90个数, 不是89个数. 2. (n - 1) / len不是n / len.

Last updated