写一个函数,计算0到n之间2的个数。
2015-10-14 10:52
204 查看
题目
写一个函数,计算0到n之间2的个数。
解答
最简单直观的方法就是对于0到n之间的数,一个个地去统计2在它们上出现的个数, 然后累加起来即可。求2在某个数上出现的次数需要O(logn)的时间,一共有n个数, 所以共需要O(nlogn)的时间。如果我们把问题一般化一下:写一个函数,计算0到n之间i出现的次数,i是1到9的数。 这里为了简化,i没有包含0,因为按以上的算法计算0出现的次数, 比如计算0到11间出现的0的次数,会把1,2,3,4…视为01,02,03,04… 从而得出错误的结果。所以0是需要单独考虑的,为了保持一致性,这里不做讨论。 将上面的三条结论应用到这就是:
1234 | 当某一位的数字小于i时,那么该位出现i的次数为:更高位数字x当前位数当某一位的数字等于i时,那么该位出现i的次数为:更高位数字x当前位数+低位数字+1当某一位的数字大于i时,那么该位出现i的次数为:(更高位数字+1)x当前位数 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | int Countis(int n, int i){ if(i<1 || i>9) return -1;//i只能是1到9 int count = 0; int factor = 1; int low = 0, cur = 0, high = 0; while(n/factor != 0){ low = n - (n/factor) * factor;//低位数字 cur = (n/factor) % 10;//当前位数字 high = n / (factor*10);//高位数字 if(cur < i) count += high * factor; else if(cur == i) count += high * factor + low + 1; else count += (high + 1) * factor; factor *= 10; } return count; } |
相关文章推荐
- jqGrid 属性rownum默认值:20,全部显示设置为-1
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数013,shape模型
- Json解析工具Jackson(简单应用)
- 用网页做斯特鲁普效应(Stroop effect) 的实验(待完善)
- XIO内核架构分析
- hexo生成sitemap
- abap开发alv篇
- Android开发总结笔记 四大组件之Activity(下) 1-2-3
- Spring AOP 详解
- NetworkUtil 网络工具类
- hdu 1513
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数012,polygon,多边形
- 深入理解php内核——读书笔记1
- Linux中的likely()和unlikely()
- RFID Hacking:突破门禁潜入FreeBuf大本营
- 监听Android所有Activity的生命周期
- Ajax知识总结
- .htaccess做301重定向的几种方法【亲测有效】
- Maximum execution time of 30 seconds exceeded
- JAVA操作properties文件