leetcode刷题笔记 233题 数字 1 的个数

leetcode刷题笔记 233题 数字 1 的个数

源地址:233. 数字 1 的个数

问题描述:

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

示例:

输入: 13
输出: 6
解释: 数字 1 出现在以下数字中: 1, 10, 11, 12, 13 。

object Solution {
    def countDigitOne(n: Int): Int = {
        var pos: Long = 1
        var res: Long = 0
		
        //按位计算 各可能包含当前位为1的组合个数外加当前位可用于组合的个数
        while (pos <= n) {
            val divider: Long = pos * 10
            res = res + n / divider * pos + math.min(math.max(n % divider - pos + 1, 0.toLong), pos)
            pos = divider
        }
        
        return res.toInt
    }
}
posted @ 2020-10-21 22:22  ganshuoos  阅读(203)  评论(0编辑  收藏  举报