一、题解

给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数。

 

示例 1:

输入:n = 13
输出:6
示例 2:

输入:n = 0
输出:0
 

提示:

0 <= n <= 2 * 109

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-digit-one
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、题目难度:困难

三、题解

class Solution {
public:
    int countDigitOne(int n) {
        int res = 0;
        for(long long i=1;i<=n;i *= 10){
            long long interval = i * 10;
            res += n/interval * i + min(i,max(0LL,n%interval-i+1));
        }
        return res;
    }
};

 

posted on 2021-03-20 22:05  曹婷婷  阅读(3)  评论(0编辑  收藏  举报