面试题32:从1到n整数中1出现的次数
2013-07-18 13:09
197 查看
题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1的数字有1,10,11和12共4次。
1,不考虑时间效率的方法,每浏览一个数,判断每一位是不是含1.时间复杂度:位数O(logn),数n,总:O(n*logn)
2,根据数学规律:排列组合
对1000:
最高位:0,3*10*10-2种
1::1*(0+1)*(0+1)*(0+1)
1234:
最高位:0,3*10*10-2种
1::1*(2+1)*(3+1)*(4+1)
3124:
最高位:0,2:2*(3*10*10-2)种
1::1000
3:f(124)
源代码:
#include "stdio.h"
int caliq(int i,int q)
{
return i*q/10-(i-1);
}
int f(int data)
{
if(data == 0)
return 0;
if(data>=1 && data<10)
return 1;
int high=data;
int q=1,i=0;
int s1=1;
while(high/10)
{
i++;
q=q*10;
int temp=high%10;
high=high/10;
s1=s1*(temp+1);
}
//printf("i:%d;q:%d;high:%d",i,q,high);
if(data>=q && data<2*q)
{
//printf("last:%d\n",caliq(i,q)+s1);
return caliq(i,q)+s1;
}
else
{
return (high-1)*caliq(i,q)+q+f(data-high*q);
};
}
void main()
{
int a=3125;
//int a=21345;
int result=f(a);
printf("result:%d",result);
}
结果:
result:1633Press any key to continue
1,不考虑时间效率的方法,每浏览一个数,判断每一位是不是含1.时间复杂度:位数O(logn),数n,总:O(n*logn)
2,根据数学规律:排列组合
对1000:
最高位:0,3*10*10-2种
1::1*(0+1)*(0+1)*(0+1)
1234:
最高位:0,3*10*10-2种
1::1*(2+1)*(3+1)*(4+1)
3124:
最高位:0,2:2*(3*10*10-2)种
1::1000
3:f(124)
源代码:
#include "stdio.h"
int caliq(int i,int q)
{
return i*q/10-(i-1);
}
int f(int data)
{
if(data == 0)
return 0;
if(data>=1 && data<10)
return 1;
int high=data;
int q=1,i=0;
int s1=1;
while(high/10)
{
i++;
q=q*10;
int temp=high%10;
high=high/10;
s1=s1*(temp+1);
}
//printf("i:%d;q:%d;high:%d",i,q,high);
if(data>=q && data<2*q)
{
//printf("last:%d\n",caliq(i,q)+s1);
return caliq(i,q)+s1;
}
else
{
return (high-1)*caliq(i,q)+q+f(data-high*q);
};
}
void main()
{
int a=3125;
//int a=21345;
int result=f(a);
printf("result:%d",result);
}
结果:
result:1633Press any key to continue
相关文章推荐
- 面试题32 整数中1出现的次数(从1到n整数中1出现的次数)
- 剑指offer--面试题32:整数中1出现的次数(从1到n整数中1出现的次数)
- 剑指Offer面试题32(Java版):从1到n整数中1出现的次数
- 剑指offer——面试题32:从1到n整数中1出现的次数
- 剑指offer——面试题32:从1到n整数中1出现的次数
- 面试题32:从1到n整数中1出现的次数
- 剑指Offer_面试题32_从1到n整数中1出现的次数(预留未解决)
- 剑指offer——面试题32:从1到n整数中1出现的次数
- 剑指Offer面试题32(java版):从1到n整数中1出现的次数
- 剑指Offer:面试题32:从1到n整数中1出现的次数
- 【剑指offer】面试题32-从1到n整数中1出现的次数
- 剑指Offer面试题32:从1到n整数中1出现的次数 Java实现
- 剑指offer面试题32:从1到n整数中1出现的次数
- 剑指offer-面试题32.从1到n整数中1出现的次数
- 剑指offer 面试题32 从 1 到 n 整数中 1 出现的次数
- 剑指Offer:面试题32 从1到n整数中1出现的次数
- 面试题32:从1到n整数中1出现的次数
- 面试题32:从1到n整数中1出现的次数
- 剑指Offer----面试题32:从1到n整数中1出现的次数
- 面试题32.从1到n整数中1出现的次数