一种是Brute force,O(nlogn)

另一种是找规律O(n),见http://hawstein.com/posts/20.4.html

  1. 当某一位的数字小于2时,那么该位出现2的次数为:更高位数字x当前位数
  1. 当某一位的数字大于2时,那么该位出现2的次数为:(更高位数字+1)x当前位数
  1. 当某一位的数字等于2时,那么该位出现2的次数为:更高位数字x当前位数+低位数字+1
  1. package Hard;
  2.  
  3. /**
  4. * Write a method to count the number of 2s between 0 and n.
  5.  
  6. 译文:
  7.  
  8. 写一个函数,计算0到n之间2的个数。
  9. *
  10. */
  11. public class S18_4 {
  12.  
  13. // O(n)
  14. public static int count2s(int n){
  15. int count = 0;
  16. int factor = 1;
  17. int low = 0, cur = 0, high = 0;
  18.  
  19. while(n/factor != 0){
  20. low = n - (n/factor) * factor; // 低位
  21. cur = (n/factor) % 10; // 当前位
  22. high = n / (factor*10); // 高位
  23.  
  24. if(cur < 2){
  25. count += high * factor;
  26. }else if(cur > 2){
  27. count += (high+1) * factor;
  28. }else{
  29. count += high*factor + low + 1;
  30. }
  31.  
  32. factor *= 10;
  33. }
  34.  
  35. return count;
  36. }
  37.  
  38. //=============================================
  39.  
  40. public static int numberOf2s(int n) {
  41. int count = 0;
  42. while (n > 0) {
  43. if (n % 10 == 2) {
  44. count++;
  45. }
  46. n = n / 10;
  47. }
  48. return count;
  49. }
  50.  
  51. // Brute force way O(nlogn)
  52. public static int numberOf2sInRange(int n) {
  53. int count = 0;
  54. for (int i = 2; i <= n; i++) { // Might as well start at 2
  55. count += numberOf2s(i);
  56. }
  57. return count;
  58. }
  59.  
  60. public static void main(String[] args) {
  61. for (int i = 0; i < 1000; i++) {
  62. int b = numberOf2sInRange(i);
  63. int v = numberOf2sInRange(i);
  64. System.out.println("Between 0 and " + i + ": " + v + ", " + b);
  65. }
  66. }
  67.  
  68. }

Hard 计算0到n之间2的个数 @CareerCup的更多相关文章

  1. 统计0到n之间1的个数

    问题描写叙述 给定一个十进制整数N,求出从1到N的全部整数中出现"1"的个数. 比如:N=2时 1,2出现了1个 "1" . N=12时 1,2,3,4,5,6 ...

  2. 统计0到n之间1的个数[数学,动态规划dp](经典,详解)

    问题描述 给定一个十进制整数N,求出从1到N的所有整数中出现”1”的个数.  例如:N=2时 1,2出现了1个 “1” . N=12时 1,2,3,4,5,6,7,8,9,10,11,12.出现了5个 ...

  3. 给定一个函数rand()能产生0到n-1之间的等概率随机数,问如何产生0到m-1之间等概率的随机数?

    题目:给定一个函数rand()能产生1到n之间的等概率随机数,问如何产生1到m之间等概率的随机数? 先把问题特殊化,例如原题变为给定一个函数rand5(),该函数可以随机生成1-5的整数,且生成概率一 ...

  4. 根据地图上的两个点各自的x,y坐标,计算出2点之间的直线距离。显示为公里、米

    /** * calc_map_distance() , 根据地图上的两个点各自的x,y坐标,计算出2点之间的直线距离 * @param array $point_1 第1个点的x,y坐标 array( ...

  5. IOS 计算两个经纬度之间的距离

    IOS 计算两个经纬度之间的距离 一 丶 -(double)distanceBetweenOrderBy:(double) lat1 :(double) lat2 :(double) lng1 :(d ...

  6. java中计算两个日期之间天数的程序设计。

    //用java编写出一个以下方法计算两个日期之间天数的程序设计. import java.util.regex.Matcher; import java.util.regex.Pattern; pub ...

  7. opencv计算两个轮廓之间hu矩相似程度,MatchShapes

    https://blog.csdn.net/jiake_yang/article/details/52589063 [OpenCV3.3]通过透视变换矫正变形图像 https://blog.csdn. ...

  8. 计算2个时间之间经过多少Ticks

    Ticks是一个周期,存储的是一百纳秒,换算为秒,一千万分之一秒.我们需要计算2个时间之间,经过多少Ticks,可以使用下面的方法来实现,使用2个时间相减. 得到结果为正数,是使用较晚的时间减去较早的 ...

  9. 高德地图 API 计算两个城市之间的距离

    1. 目前在项目中,遇到一个需求不会做,就是要计算两个城市之间的距离,而这两个城市的输入是可变的,如果要使用数据库来先存储两地之间的距离,调用的时候再来调用,那么存数据的时候,要哭的,因为光是省级区域 ...

随机推荐

  1. hdoj 2602(背包)

    Problem D Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Sub ...

  2. Winform使用DevExpress的WaitDialogForm画面

    使用了DevExpress的WaitDialogForm 在应用程序加载开始时新建一个线程,并将loading画面show起来,在应用程序画面弹出前将该线程终止. 代码: private DevExp ...

  3. 在Lufylegend中如何设置bitmap或者sprite的缩放和旋转中心

    最近两天有个lufylegend游戏引擎群的群友需要做一个项目,其中要解决的需求是:获取照相机拍摄的图片,根据图片的EXIF信息让图片显示为“正常”情况,并且需要给图片添加一些事件侦听.何为正常呢?就 ...

  4. impress.js学习总结

    impress.js是一个很有趣的用来替代PPT的展示用的js工具,它的灵感来自prezi 如果你要学习使用它,这里有很好的演示模板 使用它的第一步,下载 impress.js,引入到你的代码里,并执 ...

  5. POJ2524-宗教问题-并查集-ACM

    太难的搞不过,只能来写简单的了 POJ2524 无所不在的宗教 世界上宗教何其多.假设你对自己学校的学生总共有多少种宗教信仰很感兴趣.学校有n个学生,但是你不能直接问学生的信仰,不然他会感到很不舒服的 ...

  6. 解决nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed错误

    重新启动服务器,访问web服务发现无法浏览,登陆服务器之 后进到nginx使用./nginx -s reload重新读取配置文件,发现报nginx: [error] open() "/usr ...

  7. Flask jQuery ajax

    http://www.runoob.com/jquery/jquery-ref-ajax.html http://jun1986.iteye.com/blog/1399242 下面是jQuery官方给 ...

  8. 最新发布C#.NET快速开发框架企业版V4.0 (适合开发ERP、进销存系统)

    C/S系统开发框架-企业版 V4.0 (Enterprise Edition) http://www.csframework.com/cs-framework-4.0.htm 视频下载: 百度网盘: ...

  9. iOS Developer Libray (中文版)-- Defining Classes 定义类

    该篇是我自己学习iOS开发时阅读文档时随手记下的翻译,有些地方不是很准确,但是意思还是对的,毕竟我英语也不是很好,很多句子无法做到准确的字词翻译,大家可以当做参考,有错误欢迎指出,以后我会尽力翻译的更 ...

  10. 关于判断变量是否为null的顺序问题。

    if("y".equals(other)){ } 其中,other字符串变量可能为Null,可以加一个null判断或者将常量写在前面,变量写在equals后面.如果将变量other ...