题目:
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.
继续混题数。
wa了一次,没注意到位数*此位数数字的个数有可能爆int。
class Solution {
public:
int findNthDigit(int n) {
return find(1, n);
}
int find(int w, int n) {
int num = max(w) - min(w) + 1;
if ((long long)n > (long long)w * num) return find(w + 1, n - w * num);
else {
int q = (n - 1) / w;
int r = (n - 1) % w;
r++;
n = min(w) + q;
r = w - r;
while (r--) n /= 10;
return n % 10;
}
}
int max(int w) {
int rt = 0;
while (w--) rt = rt * 10 + 9;
return rt;
}
int min(int w) {
int rt = 1;
w--;
while (w--) rt *= 10;
return rt;
}
};