233. 数字 1 的个数
- 统计出每一的位上1出现的个数,累加起来就是1出现的总个数。
- num = 31456
- 现在统计百位上1出现的次数。
- 将num分成两部分(根据百位),a = 314,b=56。
- 此时a的个位是4(即num的百位是4),此时该为出现1的次数为:31*100次。
- 假设a的个位数是x,
- 当x > 1时,百位出现1的次数:(a / 10 + 1) * 100
- 当x = 1时,百位出现1的次数:(a / 10 ) * 100 + b + 1 (0~b)
- 当x = 0时,百位出现1的次数:(a / 10 ) * 100
- 根据规律,可以分为两类,一类x >= 2;一类0 <= x < 2,用一个表达式写出:
- (a+8) / 10 * 100 ,再将x = 1的特殊情况写入表达式:(a+8) / 10 * 100 + (a % 10 == 1 ) * (b + 1)
var countDigitOne = function (n) {
var res = 0, a = 1, b = 1;
while (n > 0) {
res += Math.floor((n + 8) / 10) * a + (n % 10 == 1) * b;
b += n % 10 * a;
a *= 10;
n = Math.floor(n / 10)
}
return res;
};