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).
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.<Solution>
想法如下(參考資料)
- 第一步,先確定答案會在哪個區間。是在雙位數還是三位數
- 第二步,找到答案所在的數字
- 第三步,找到哪一個位數是所要的答案
C++
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Solution { | |
public: | |
int findNthDigit(int n) { | |
//>> calculate how many digits the number has | |
long numCnt = 9; | |
int digits = 1; | |
while(n - numCnt * digits > 0) { | |
n -= numCnt * digits; | |
numCnt *= 10; | |
++digits; | |
} | |
//>> find out which number is | |
long number = 1; | |
for(int i = 1; i < digits; i++) { | |
number *= 10; | |
} | |
int index = n % digits; | |
if(index == 0) { | |
index = digits; | |
} | |
number += (index == digits) ? n / digits - 1 : n / digits; | |
//>> find the digit | |
for(int i = index; i < digits; i++) { | |
number /= 10; | |
} | |
return number % 10; | |
} | |
}; |
沒有留言:
張貼留言