400. Nth Digit

1. Description

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

2. Note

  • n is positive and will fit within the range of a 32-bit signed integer (n < $2^{31}$).

3. Example

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.

4. Solutions

My Accepted Solution

Time complexity: O($log_{10}n$)
Space complexity: O($log_{10}n$)

class Solution 
{
public:
    int findNthDigit(int n) 
    {
        int digitsPerNumber = 1;
        long beginning = 1, digitsCount = 9;
        // find out the target number's digits
        while(n > digitsCount)
        {
            digitsPerNumber++;
            n -= digitsCount;

            beginning *= 10;
            digitsCount = beginning * 9 * digitsPerNumber;
        }

        // find out the target number
        long targetNumber = beginning + (n - 1) / digitsPerNumber;
        // find out the required digit
        return to_string(targetNumber)[(n - 1) % digitsPerNumber] - '0';
    }
};
Last updated:
Tags: Math
comments powered by Disqus