求出 1~13
的整数中1出现的次数,并算出 100~1300
的整数中1出现的次数?为此他特别数了一下 1~13
中包含1的数字有 1、10、11、12、13
因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。
以数字8103为例,分别分析每个位置为1的情况(target)
将数字拆分成 pre-target 考虑
由以上示例:分三种情况考虑,现有数字abcde,分析百位数字c
c是abcde第3位数:
当前的量级:level = 10的(3-1)次方
function NumberOf1Between1AndN_Solution(n) { let count = 0; let i = 1; let high = low = current = level = 0; let length = n.toString().length; while (i <= length) { level = Math.pow(10, i - 1); //第i位数位于什么量级 1 10 100 ... high = parseInt(n / (level * 10)); low = n % Math.pow(10, i - 1); current = parseInt(n / level) % 10; if (current === 0) { count += (high * level); } else if (current === 1) { count += (high * level + low + 1); } else { count += ((high + 1) * level); } i++; } return count; }