๐ŸŒ•๐ŸŒ•๐ŸŒ— ๅ‰‘ๆŒ‡ Offer 44. ๆ•ฐๅญ—ๅบๅˆ—ไธญๆŸไธ€ไฝ็š„ๆ•ฐๅญ—

ๅžไฝ›็ซฅๅญ2022ๅนด10ๆœˆ10ๆ—ฅ
  • algorithm
  • ๆ‰พ่ง„ๅพ‹
ๅฐไบŽ 1 ๅˆ†้’Ÿ

๐ŸŒ•๐ŸŒ•๐ŸŒ— ๅ‰‘ๆŒ‡ Offer 44. ๆ•ฐๅญ—ๅบๅˆ—ไธญๆŸไธ€ไฝ็š„ๆ•ฐๅญ—

้šพๅบฆ: ๐ŸŒ•๐ŸŒ•๐ŸŒ—

้—ฎ้ข˜ๆ่ฟฐ

img_68.png


่งฃๆณ•

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';
    }
}

่พ“ๅ‡บ

img_67.png

ไธŠๆฌก็ผ–่พ‘ไบŽ: 2022/10/10 ไธ‹ๅˆ8:43:48
่ดก็Œฎ่€…: liuxianzhishou