Check the same-length ranges 1-9, 10-99, 100-999, 1000-9999, etc.

Python:

```
def findNthDigit(self, n):
n -= 1
for digits in range(1, 11):
first = 10**(digits - 1)
if n < 9 * first * digits:
return int(str(first + n/digits)[n%digits])
n -= 9 * first * digits
```

Java:

```
public int findNthDigit(int n) {
n -= 1;
int digits = 1, first = 1;
while (n / 9 / first / digits >= 1) {
n -= 9 * first * digits;
digits++;
first *= 10;
}
return (first + n/digits + "").charAt(n%digits) - '0';
}
```

Using divisions instead of multiplications to prevent overflow.