国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > php开源 > php教程 > 从1到n整数中1出现的次数

从1到n整数中1出现的次数

来源:程序员人生   发布时间:2016-07-04 12:14:38 阅读次数:2956次

题目

输入1个整数n,求从1到n这n个整数的10进制表示中1出现的次数。例如输入12,从1到12这些整数中包括1的数字有1,10,11,12共出现5次

解题

这个题目比较难
直接暴力

public class Solution { public int NumberOf1Between1AndN_Solution(int n) { int count = 0; for(int i =1;i<=n;i++){ count +=NumberOf1(i); } return count; } public int NumberOf1(int num){ int count =0; while(num!=0){ if(num%10==1){ count++; } num/=10; } return count; } }

对数字n,有log(n)
对1到n内的数统计1的次数,时间复杂度就是nlog(n)

编程之美上讲授很详细,不想敲字了

public class Solution { public int NumberOf1Between1AndN_Solution(int n) { int count = 0; int factor = 1; int low = 0; int cur = 0; int high = 0; while(n/factor!=0){ cur = (n/factor)%10; //当前位 low = n - (n/factor)*factor ;// 低位数字 high = n/(factor*10); //更高位 switch( cur){ case 0: count+= high* factor; break; case 1: count+= high* factor + low + 1; break; default: count +=(high+1) * factor; break; } factor *=10; } return count; } }
生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生