题解 | 整数中1出现的次数(从1到n整数中1出现的次数)
class Solution {
public:
// 简化官方题解的公式,写更clean的code。
int NumberOf1Between1AndN_Solution(int n) {
int res = 0;
long long MulBase = 1; //循环的基数
for (int i = 0; MulBase <= n; i++) {
// 先统计走完了整个基数的部分
res += (n / (MulBase * 10)) * MulBase;
// 统计余数部分
int tail = n % (MulBase * 10);
if (tail >= MulBase * 2) {
res += MulBase;
} else if (tail >= MulBase) {
res += tail - MulBase + 1;
}
MulBase *= 10; //扩大一位数
}
return res;
}
};
查看5道真题和解析