[LeetCode] Nth Digit
阿新 • • 發佈:2017-12-06
ati pan 計算 lee tput 整數 esc ive leet
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~n有序數字中的第n位。 首先需要確定的是1-9之間有9個數。10-99之間有90個數,100-999之間有900個數。 如果要找出有序數中第n個數,需要判斷這個第n位的區間範圍,實在1-9之間還是在10-99之間。 所以需要一個base和digits來確定n屬於的大致區間及所在區間的整數位數。 step1:確定n所在整數區間的整數位數,這時n就表示從該digits整數位數開始的第n位。 step2:計算第n個數字是什麽。 step3:這個數字中的第index位。也就是題目要求的第n位值。
class Solution { public: int findNthDigit(int n) {// 1. calc how many digits the number has. long base = 9, digits = 1; while (n - base * digits > 0) { n -= base * digits; base *= 10; digits++; } // 2. calc what the number is. int index = n % digits; if (index == 0) index = digits; long num = 1; for (int i = 1; i < digits; i++) num *= 10; num += (index == digits) ? n / digits - 1 : n / digits; // 3. find out which digit in the number. for (int i = index; i < digits; i++) num /= 10; return num % 10; } }; // 3 ms
[LeetCode] Nth Digit