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