JZ31 1~n整数中出现的次数

题目描述

求出1~ 13的整数中1出现的次数,并算出100~ 1300的整数中1出现的次数?为此他特别数了一下1~ 13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。

思路

两种比较容易想到的方法(虽然我自己是没想到)

方法1

用to_string函数将整数化为字符串,然后数每个字符串中‘1’的个数
但是比较耗时
代码:

class Solution {
public:
            int NumberOf1Between1AndN_Solution(int n)
            {
            int count = 0;
            string str;
            for (int i = 1; i < n + 1; i++)
            {
                str = to_string(i);
                for (int j = 0; j < str.size(); j++)
                {
                    if (str[j] == '1')
                    {
                        count++;
                    }
                }
            }
            return count;

    }
};

方法2

还是从1到n,对于每一个数来说,数他1的个数,相当于先%10看是否等于1,然后再/10;继续%10看是否等于1
这种方式还是需要对每一个数进行处理

class Solution {
public:
    int NumberOf1Between1AndN_Solution(int n)
    {
        if(n<=0)
            return 0;
        int count=0;
        for(int i=0;i<=n;i++)
        {
            int temp=i;       //我一开始没加这一句,那不是傻了么,i一直在变了,还怎么结束啊
            while(temp)
            {
                if(temp%10==1)
                    count++;
                temp/=10;
            }
        }
        return count;
    }
};

方法三

书上的方法,对于数去找规律,用递归进行求解;上面两种方法可能在数值比较小的时候看不出劣势,但是如果数值很大的话一个一个的处理会非常耗时,所以之后可以看下书上这道题的思路

全部评论

相关推荐

哞客37422655...:这就是真实社会,没有花里胡哨的安慰,让你感受到阶级分明,不浪费彼此时间。虽然露骨但是唉
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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