利用字符串的查找功能
整数中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;
}
};