09 | #整数中1出现的次数(从1到n整数中1出现的次数)#
整数中1出现的次数(从1到n整数中1出现的次数)
http://www.nowcoder.com/practice/bd7f978302044eee894445e244c7eee6
通过数学归纳方法总结规律,可以类比得出这样的公式(可参考百位类比):
class Solution {
public:
int NumberOf1Between1AndN_Solution(int n) {
int res = 0;
long long multik = 1;
for (int k = 0; n >= multik; k++) { /* multik代表10^k */
long long multikTmp = multik * 10; /* 10^(k + 1) */
res += ((n / multikTmp) * multik) + min(max((n % multikTmp) - multik + 1, 0LL), multik); /* 注意0LL */
multik *= 10;
}
return res;
}
};
每日算法 文章被收录于专栏
每日算法、玩转技术、聪明理财、幸福生活!