题⽬描述
求出 1~13 的整数中1出现的次数,并算出 100~1300 的整数中 1 出现的次数?为此他特别数了⼀下 1~13 中包含 1 的数字有 1、10、11、12、13 因此共出现 6 次,但是对于后⾯问题他就没辙了。 ACMer 希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意⾮负整数区间中 1 出现的次数(从 1 到 n 中 1 出现的次数)。
输入:13
输出:6
思路及解答
暴力循环法
[code]public class Solution { public int countDigitOne(int n) { if (n 1</strong>:当前位大于 1 时,此位出现 1 的次数由高位决定,计算公式为 (high + 1) * digit。
例如,n=2324,求十位上1的出现次数。高位 high=23,当前位 cur=2,低位 low=4。十位为1的数字范围是0010-2319,看高位和低位相当于000-239,共240个数,即 (23 + 1) * 10 = 240。</ol>[code]public class Solution { public int countDigitOne(int n) { if (n |