利用字符串的查找功能

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

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

字符串法:
既然是找1-n中1出现的次数,我们可将1到n的每个整数都转为子符串,然后利用string.find()函数找出每个字符串中字符'1'的个数,然后累加即可。
例如:1转为字符串"1" ,10转为字符串"10", 121 转为字符串"121"(提示 to_string()函数可将其他类型快速转为字符串)

代码实现

class Solution {
public:
    int NumberOf1Between1AndN_Solution(int n)
{
    if(n<=0) return 0;//没啥用严谨一点
    int count=0;//初始化累计1的个数为0
    for(int i=1;i<=n;i++)
    {
        string tem=to_string(i);//将1-n的每一个整数 都转换为字符串类型
        string position;//从第0位开始记录字符串中出现1的位置
        int pos=0;//每次都从字符串的第0位开始查找,直到找完整个字符串
        while((pos<tem.size())&&tem.find('1',pos)!=string::npos)
        {
            //判断Pos是否已经被找过
            string temp=to_string(tem.find('1',pos));//将找到的'1'的位置转为字符串 用于下一句if判断
            if(position.find(temp)==string::npos)//该位置的'1'没被记录过
               {
                 position+=temp;//将没被记录过的位置  保存在position 中
                count++;//1的个数加1
                pos++;  //下一个位置
                }
             else//该位置的'1'被记录过 那么位置+1
                pos++;//下一个位置
        }
    }
    return count;
}
};
全部评论

相关推荐

点赞 评论 收藏
转发
1 收藏 评论
分享
牛客网
牛客企业服务