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

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

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

	//eg:3140192  (注:看的别人题解的理解)
    //此题只需关注数中的每一位都是为1的情况,然后累加起来就行
    //记cur = 要算的某位位置 , cur左边记为a , cur右边记为b
    //位上的数分为0 1 大于1 三种情况
    //(1) cur = 0的情况,比如例子中千位的情况,
    //如果万位上为1,那么cur左边只能是 0~313 , 右边是0~592 a=314 b=192
    //那么此时 a*1000
    //(2) cur = 1的情况,比如例子中百位的情况
    //   又分为两种情况
    //   第一种情况:左边为 0~3139 ,右边是0~99
    //   第二种情况:右边为 3140 , 右边是0~92
    //   综上为: a*100+1*(b+1)
    //(3) cur>1 的情况,比如例子中十位的情况,
    // 如果十位是1 , 那么就为 0~31401 右边是0—9
    //   所以 (a+1)*10
    public int NumberOf1Between1AndN_Solution(int n) {
        int counts=0;
        for (int m = 1; m <=n; m=m*10) {
            int a=n/m, b=n%m;
            counts+=(a+8)/10*m+(a%10==1 ? b+1 :0); //a%10表示上一位是否为1,为0?后一位为几就加几:0
  
        }
        return counts;
    }
}
全部评论

相关推荐

死在JAVA的王小美:哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈,我也是,让我免了一轮,但是硬气拒绝了
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务