前记
不得不说自己还欠缺很多, 这道easy的leetcode原题就在今年阿里笔试编程题(第二题)出现了, 当时没有AC, 做题不够实在伤感...

Description

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

Note:
n is positive and will fit within the range of a 32-bit signed integer (n < 231).

Example 1:

Input:
3

Output:
3
Example 2:

Input:
11

Output:
0

Explanation:
The 11th digit of the sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... is a 0, which is part of the number 10.

My solution

下面代码自己AC代码, 查看discuss发现大家思路都是这样做.

class Solution {
public:
    int findNthDigit(int n) {
        long long sum = 0;
        long long tens = 1;
        int i;
        for (i = 1; sum < n; ++i, tens *= 10) {
            sum += i * tens * 9;
        }
        tens /= 10;
        --i;
        sum -= tens * 9 * i;
        int dif = n - sum;
        int whichNum = dif / i + tens;
        int yu = dif % i;
        if (yu == 0) return (whichNum - 1) % 10;
        while (--yu) tens /= 10;
        whichNum /= tens;
        return whichNum % 10;
    }
};

Reference


xufeng
8 声望3 粉丝

有多少人工就有多少智能