求出整数中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的重复计算么,目前就这样吧,下一次再加深讨论

查看1道真题和解析
