输入一个整数n,求1~n这n个整数的十进制表示中1出现的次数,例如,输入12,1~12这些整数包含1的数字有1,10,11,12,1一共出现了5次
这是我在写剑指offer中遇到的一个题,题不难,很容易的想到从1开始对每个数进行检测,先判断各位是否为1,再判断它是否为十位数,对该数除10之后再进行判断,如果该数小于10时跳出循环。
int main()
{
int count = 0;
int k = 15;
for(int i =1;i<= k;i++)
{
int n = i;
while(n!=0)
{
if(n%10==1)
{
count++;
}
if (n/10 == 1)
{
count++;
}
n =n/10;
if(n<10)
{
break;
}
}
}
cout<<count<<endl;
return 0;
}
这是最简单的一种方法,不难看出这种方法的时间复杂度过大O(n^2),需要对整个数组进行循环遍历,还需要对每个数进行循环检测。