数字 1 的个数

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

  • 输入:n = 13
    输出:6

  • 输入:n = 0
    输出:0

1
2
3
4
5
6
7
8
9
10
11
12
13
var countDigitOne = function(n) {
let count = 0;

for (let i = 1; i <= n; i *= 10) {
let divide = i * 10;
let p = Math.floor(n / divide), k = n % divide, rest = 0;

count += p * i;
rest = (k > (2 * i - 1)) ? i : ((k < i) ? 0 : k - i + 1);
count += rest;
}
return count;
};