09 | #整数中1出现的次数(从1到n整数中1出现的次数)#

整数中1出现的次数(从1到n整数中1出现的次数)

http://www.nowcoder.com/practice/bd7f978302044eee894445e244c7eee6

通过数学归纳方法总结规律,可以类比得出这样的公式(可参考百位类比): alt

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;
    }
};
每日算法 文章被收录于专栏

每日算法、玩转技术、聪明理财、幸福生活!

全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务