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:3Output:3
Example 2:
Input:11Output:0Explanation: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.
1 class Solution { 2 public: 3 int findNthDigit(int n) { 4 // step 1. calculate how many digits the number has. 5 long base = 9, digits = 1; 6 while (n - base * digits > 0) 7 { 8 n -= base * digits; 9 base *= 10;10 digits ++;11 }12 13 // step 2. calculate what the number is.14 int index = n % digits;15 if (index == 0)16 index = digits;17 long num = 1;18 for (int i = 1; i < digits; i ++)19 num *= 10;20 num += (index == digits) ? n / digits - 1 : n / digits;;21 22 // step 3. find out which digit in the number is we wanted.23 for (int i = index; i < digits; i ++)24 num /= 10;25 return num % 10;26 }27 };