思路是从个位开始一位位的计算每一位1出现的次数....对于每一位来说由三种情况
a=n/m(个位是当前计算的这位),b=n%m(这位之后的余数);
那么(a%10):
case > 1: count+= (a/10+1)*m;
case < 1: count+= (a/10)*m;
case == 1: count+= (a/10)*m+b+1;
public class Solution {
public int countDigitOne(int n) {
long m=1,count=0;
while( m<=n )
{
long a=n/m,b=n%m;
if( a%10<1 )
{
count+=(a/10)*m;
}
else if( a%10>1 )
{
count+=(a/10+1)*m;
}
else
{
count+=(a/10)*m+b+1;
}
m*=10;
}
return (int)(count);
}
}