原题网址:https://leetcode.com/problems/nth-digit/
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.
方法:分析总结规律。
public class Solution {
public int findNthDigit(int n) {
if (n < 10) return n;
long len = 1;
long pow = 1;
long count = 0;
while (count + 9 * pow * len < n) {
count += 9 * pow * len;
pow *= 10;
len++;
}
long base = pow;
long offset = n - 1 - count;
long num = base + offset / len;
long remainder = offset % len;
for(int i = 1; i < len - remainder; i++) {
num /= 10;
}
return (int)(num % 10);
}
}