๐ŸŒ•๐ŸŒ•๐ŸŒ— 233. ๆ•ฐๅญ— 1 ็š„ไธชๆ•ฐ

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

๐ŸŒ•๐ŸŒ•๐ŸŒ— 233. ๆ•ฐๅญ— 1 ็š„ไธชๆ•ฐ

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

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

img_3.png


่งฃๆณ•

class Solution {
    public int countDigitOne(int n) {
        // ๆ€่ทฏ๏ผš
        // ไพๆฌก่ฎก็ฎ—ๆฏไธช้ž้›ถไฝไธญ 1 ็š„ไธชๆ•ฐ๏ผŒๅ–ๅ†ณไบŽ ๅฝ“ๅ‰ไฝ็š„ๅ€ผ & ้ซ˜ไฝๅ€ผ & ไฝŽไฝ
        // ๅ›บๅฎš่ฏฅไฝ๏ผŒๅ…ถไฝ™ไฝๆœ‰ๅคšๅฐ‘็งๆƒ…ๅ†ต
        // ไพ‹๏ผŒ6017
        // ไธชไฝ 7 -> 602 * 1
        // ๅไฝ 1  -> 60 * 10 + 8
        // ็™พไฝ 0  -> 6 * 100
        // ๅƒไฝ 6  -> 1 * 1000
        int res = 0;
        int high = n / 10;
        int cur = n % 10;
        int low = 0;
        int mul = 1;
        while(high != 0 || cur != 0) {
            // System.out.println(high + "  " + mul + "  " + low  + "  " + cur);
            if(cur == 0) {
                // ้ซ˜ไฝ * mul
                res += high * mul;
            } else if(cur == 1) {
                // ้ซ˜ไฝ * mul + ไฝŽไฝ + 1
                res += high * mul + low + 1;
            } else {
                // cur > 1
                res += (high + 1) * mul;
            }
            low += cur * mul;
            mul *= 10;
            cur = high % 10;
            high /= 10;
        }
        return res;
    }
}

่พ“ๅ‡บ

img_2.png

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