求出整数中1出现的次数,

class Solution {
public:
    int NumberOf1Between1AndN_Solution(int n)
    {
        if(n<=0)
            return 0;
        if(n<10)
            return 1;
        int count=0;
        for(long i=1;i<=n;i*=10)//以十倍的增长
        {
             int k=n%(i*10);
             int m;
             if(k>i*2+-1)
                 m=i;
             else if(k<i)
                 m=0;
            else m=k-i+1;
            count+=n/(i*10)*i+m;           
        }
        return count;

    }
};

归纳出来的规律为:count(i) = (n / (i * 10)) * i + (if(k > i * 2 - 1) i else if(k < i) 0 else k - i + 1)
大神解法:
1.转换字符串解法,
2.还有另一种归纳,
不过这种解法我还有一个问题,不会出现11的重复计算么,目前就这样吧,下一次再加深讨论

全部评论

相关推荐

青春运维少年不会梦到...:实习大王
点赞 评论 收藏
分享
影04714:把图书管理系统那个项目经验内容适当的减少掉,然后改成据为己有不要说团队项目,因为图书管理系统这类常见的谁来了都能独立写出来,提问能圆过来即可
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务