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

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

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

以十位数为例介绍思路

  • 每100个数里面有10个数的十位为1, 也就是 (n/100)*10
  • 除去整百之后(即n%100),剩下的分三种情况:(1)十位数大于1,那么还有10个数的十位为1;(2)十位数为1,那么还有(个位数+1)个数的十位为1;(3)十位数为0,那么没有十位为1的数

上述分析也可以类比到其他数位。
程序如下

public class Solution {
    public int NumberOf1Between1AndN_Solution(int n) {
        int count = 0;
        int a, b, c;
        for (int m = 1; m <= n; m *= 10) {
            a = n / (10 * m);
            b = n % (10 * m) / m;
            c = n % m;
            count += a * m + (b > 1 ? m : (b == 1 ? c + 1 : 0));
        }
        return count;
    }
}
全部评论
妙!想了很久才想通
点赞
送花
回复
分享
发布于 2020-10-10 09:42
还是不太懂,a,b,c都是啥意思呢
点赞
送花
回复
分享
发布于 2021-05-23 10:21
滴滴
校招火热招聘中
官网直投

相关推荐

4 2 评论
分享
牛客网
牛客企业服务