从1到n整数中1出现的次数
输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。
例如输入12,从1到12这些整数中包含“1”的数字有1,10,11和12,其中“1”一共出现了5次。
样例
输入: 12
输出: 5
数学
时间复杂度O(logn)
class Solution {
static public int numberOf1Between1AndN_Solution(final int n) {
int sum = 0;
int ab = n;
int def = 0;
int digit = 1;
while (ab > 0) {
final int c = ab % 10;
ab /= 10;
sum += ab * digit;
if (c > 1) {
sum += digit;
} else if (c == 1) {
sum += def + 1;
}
def += c * digit;
digit *= 10;
}
return sum;
}
}