0% completed
Problem Statement
Given a positive integer n
, find the n<sup>th</sup> digit of the infinite integer sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13...
and so on.
Examples
-
Example 1:
- Input:
n = 3
- Expected Output:
3
- Justification: The third digit in the sequence
1, 2, 3, 4, 5, 6, 7...
is3
.
- Input:
-
Example 2:
- Input:
n = 110000
- Expected Output:
2
- Justification: In the sequence, the 110,000th digit is part of a larger number where the pattern has expanded beyond single, double, and triple digits. Specifically, it falls within the range of five or more digit numbers, landing on a
2
.
- Input:
-
Example 3:
- Input:
n = 15
- Expected Output:
2
- Justification: In the
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13...
sequence, the 15th digit is2
.
- Input:
Solution
To solve this problem, we first understand the pattern of digit distribution within the sequence. The sequence starts with single-digit numbers (1 to 9), followed by double digits (10 to 99), then triple digits (100 to 999), and so on. This pattern reveals that the number of digits in each group increases as we move further along the sequence. Our approach leverages this pattern to determine the digit's exact location. We'll calculate the range in which the n
th digit falls by considering the digit lengths and the counts of numbers within those lengths.
This method is effective because it breaks down the problem into manageable segments, allowing us to bypass counting each digit individually. By calculating the total digits within each range and subtracting these from n
, we can narrow down to the exact number and its digit of interest. This strategic approach reduces the computational complexity, making it a swift solution for finding the n
th digit in such an extensive sequence.
Step-by-step Algorithm
- Initialize variables to track the length of the digits (
digitLength
), the starting point of numbers within that digit length (start
), and the count of digits covered by numbers with that digit length (count
). - Loop to find the digit length where the
n
th digit falls. For each iteration:- Check if
n
is greater than the product ofdigitLength
andcount
(the total number of digits covered by numbers ofdigitLength
digits). Ifn
is greater, subtract this product fromn
, indicating we move to the next range of numbers with longer digit lengths. - Update
digitLength
to consider numbers with one more digit. - Multiply
count
with 10 to get the count of all digits for numbers with the newdigitLength
. - Multiply
start
with 10 get the first number with the currentdigitLength
.
- Check if
- Once the loop ends, the actual number (
targetNumber
) containing then
th digit is calculated by adjustingstart
based onn
anddigitLength
. - Calculate the exact digit within
targetNumber
that corresponds ton
.
Algorithm Walkthrough
Let's take the input n = 110000
.
Initial Values
n = 110000
digitLength = 1
(We start considering numbers with one digit.)count = 9
(There are 9 digits in the sequence from 1 to 9.)start = 1
(The sequence starts with the number 1.)
Step 1: Determine Digit Length
- For the first range (1-9),
n > digitLength * count
is110000 > 1 * 9
(True)- Update
n: n = n - (digitLength * count) = 110000 - 9 = 109991
- Increment
digitLength: digitLength = 2
- Update
count: count = 9 * 10 = 90
(Now considering numbers with two digits.) - Update
start: start = 1 * 10 = 10
- Update
Step 2: Move to Two-Digit Numbers
- For the two-digit range (10-99),
n > digitLength * count
is109991 > 2 * 90
(True)- Update
n: n = 109991 - 180 = 109811
- Increment
digitLength: digitLength = 3
- Update
count: count = 90 * 10 = 900
(Now considering numbers with three digits.) - Update
start: start = 10 * 10 = 100
- Update
Step 3: Move to Three-Digit Numbers
- For the three-digit range (100-999),
n > digitLength * count
is109811 > 3 * 900
(True)- Update
n: n = 109811 - 2700 = 107111
- Increment
digitLength: digitLength = 4
- Update
count: count = 900 * 10 = 9000
(Now considering numbers with four digits.) - Update
start: start = 100 * 10 = 1000
- Update
Step 4: Move to Four-Digit Numbers
- For the four-digit range (1000-9999),
n > digitLength * count
is107111 > 4 * 9000
(True)- Update
n: n = 107111 - 36000 = 71111
- Increment
digitLength: digitLength = 5
- Update
count: count = 9000 * 10 = 90000
(Now considering numbers with five digits.) - Update
start: start = 1000 * 10 = 10000
- Update
Step 5: Move to Five-Digit Numbers
- For the five-digit range (10000-99999),
n > digitLength * count
is71111 > 5 * 90000
(False)- Now, we know the nth digit is within the five-digit numbers range.
Step 6: Find the Exact Number and Digit
start
is updated to locate the exact number containing the nth digit:- Update
start: start += (n - 1) / digitLength = 10000 + (71110 / 5) = 10000 + 14222 = 24222
- Update
- The exact digit is at the
(5 - 1) % digitLength(5)
th position of24222
, which is2
.
Code
Complexity Analysis
- Time Complexity: The time complexity is O(log n) since the loop iterates through the digit lengths, which grows logarithmically with
n
. - Space Complexity: The space complexity is O(1) as the algorithm uses a constant amount of space regardless
.....
.....
.....
Table of Contents
Contents are not accessible
Contents are not accessible
Contents are not accessible
Contents are not accessible
Contents are not accessible