๐๐๐ ๅๆ Offer 44. ๆฐๅญๅบๅไธญๆไธไฝ็ๆฐๅญ
2022ๅนด10ๆ10ๆฅ
- algorithm
๐๐๐ ๅๆ Offer 44. ๆฐๅญๅบๅไธญๆไธไฝ็ๆฐๅญ
้พๅบฆ: ๐๐๐
้ฎ้ขๆ่ฟฐ
่งฃๆณ
class Solution {
public int findNthDigit(int n) {
// ๆ่ทฏ๏ผ
// 0-9๏ผ10
// 10-99๏ผ90 * 2
// 100-999๏ผ900 * 3
if(n <= 9) {
return n;
}
// n >= 10
long index = n;
int digit = 1;
long prev = 0;
long cur = 9 * (long)Math.pow(10, digit - 1) * digit;
while(index > prev + cur) {
digit ++;
prev += cur;
cur = 9 * (long)Math.pow(10, digit - 1) * digit;
}
// ๅฝๅไฝๅๅงๅผ
int first = (int)Math.pow(10, digit - 1); // ็ฎๆ ๆๅจไฝๆฐ็็ฌฌไธไธชๆฐ็ๅผ
int offset = n - (int)prev - 1;
int step = offset / digit; // ้ๅฏน first ็ๆญฅๆฐ
int real = first + step;
int tmp = offset % digit;
String str = String.valueOf(real);
// System.out.println(first + " " + str + " " + tmp);
return (int)str.charAt(tmp) - '0';
}
}