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: 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.
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 };
时间: 2024-12-14 18:48:18