Leetcode剑指 Offer 43. 1~n 整数中 1 出现的次数

原题链接

class Solution {
    public int countDigitOne(int n) {
        /*
            digit: 当前处在第几位 (个位: 1, 十位: 10)
            cur: 当前位的数值
            high: 高位的数值
            low: 低位的数值
            countOne: 当前位1出现的次数
            例: 若n为3201,当前digit为10,则
                cur = 0, high = 32, low = 1

         */
        int digit = 1, cur = n % 10, high = n / 10, low = 0;
        int countOne = 0;


        while (cur != 0 || high != 0){
            if (cur == 0){
                countOne += high * digit;
            } else if (cur == 1){
                countOne += high * digit + low + 1;
            } else {
                countOne += (high + 1) * digit;
            }
            low += cur * digit;
            cur = high % 10;
            high /= 10;
            digit *= 10;
        }

        return countOne;
    }
}
上一篇:C# MVC监控所有url


下一篇:C语言 双向链表处理大数加减