400. Nth-Digit
difficulty: Medium
section pre{ background-color: #eee; border: 1px solid #ddd; padding:10px; border-radius: 5px; }
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.
Method One
class Solution {
public int findNthDigit(int n) {
long totalDigits = 9;
long count = 1;
int digit = 1;
// 先找到所在的数字有多少位,所有的1位数共占据9位,2位数共占据180位,以此类推
while(n > totalDigits){
n -= totalDigits;
digit += 1;
count *= 10; // count 和 totalDigits 用 long 是因为这俩是可能overflow的
totalDigits = 9*count*digit;
}
// 此时 n 是剩下的总位数,而且我们也知道该数字是多少位一个的, 因此比较容易推算是哪个数字了
// int number = n/digit + ( n%digit == 0 ? 0 : 1) + count - 1;
long number = (n - 1)/digit + count;
return (int) (String.valueOf(number).charAt( (n - 1) %digit ) -'0');
}
}
Last updated
Was this helpful?