400 Nth Digit

Given an integer n, return the nth digit of the infinite integer sequence [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...].

Example 1:

Input: n = 3
Output: 3

Example 2:

Input: n = 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.

Constraints:

  • 1 <= n <= 231 - 1
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
def findNthDigit(n: int) -> int:
    length = 1       # number of digits: 1, 2, 3 ...
    range_count = 9  # count of numbers for current length: 9, 90, 900 ...
    num = 1          # current number: 1, 10, 100, 1000 ...
    while n > length * range_count:
        n -= length * range_count
        length += 1
        range_count *= 10
        num *= 10
    num += (n-1) / length
    return int(str(num)[(n-1) % length])
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
func findNthDigit(n int) int {
	length := 1
	rangeCount := 9
	num := 1
	for n > length*rangeCount {
		n -= length * rangeCount
		length += 1
		rangeCount *= 10
		num *= 10
	}
	num += (n - 1) / length
	return int(strconv.Itoa(num)[(n-1)%length] - '0')
}