leetcode 400. Nth Digit

题意:

将1,2,3,4...无限序列,组成一个视作一个连续序列,取第n位。

通俗点,就是123456789101112...,比如第11位就是0,由于第11位在10里面。

思路:

换算为实际数字及位数,就是麻烦点。

    int findNthDigit(int n) {
        if (n < 10)
            return n;
        int arr[9] = {0};
        for (int i = 1; i < 9; i++) {
            int num = (pow(10, i - 1) * 9 * i);
            arr[i] = arr[i - 1] + num;
        }

        int j = 8;
        for (; j >= 1; j--) {
            int ans = n / arr[j];
            if (ans != 0) {
                break;
            }
        }
        int x = pow(10, j) + (n - arr[j] - 1) / (j + 1);
        int bit = (n - arr[j] - 1) % (j + 1);
        return to_string(x)[bit] - '0';
    }

 

posted on 2018-02-11 15:44  willaty  阅读(157)  评论(0编辑  收藏  举报

导航