1到n中1出现的次数
程序员文章站
2024-03-07 18:26:03
...
//1到n中1出现的次数
public class GetOneNum{
//解法一:暴力**法
public static int GetOneNum(int n)
{
if(n<0)
{
return 0;
}
if(n==1)
{
return 1;
}
int sum=0;
for(int i=1;i<=n;i++)
{
int k=i;
while(k!=0)
{
if((k%10)==1)
{
++sum;
}
k=k/10;
}
}
return sum;
}
//解法二:分析规律的方法
public static int GetOneNum02(int num)
{
if(num<1)
{
return 0;
}
int len=getLenOfNum(num);
if(len==1)
{
return 1;
}
int tmp1=powerBaseOf10(len-1);
int first=num/tmp1;
int firstOneNum=first==1?num%tmp1+1:tmp1;
int otherOneNum=first*(len-1)*(tmp1/10);
//递归调用
return firstOneNum+otherOneNum+GetOneNum02(num%tmp1);
}
//获得一个数的长度
public static int getLenOfNum(int num)
{
int len=0;
while(num!=0)
{
len++;
num/=10;
}
return len;
}
//获得10的倍数
public static int powerBaseOf10(int base)
{
return (int)Math.pow(10,base);
}
public static void main(String[]args)
{
int n=111;
for(int i=1;i<=n;i++)
//System.out.println(GetOneNum(i));
System.out.println(GetOneNum02(i));
}
}
上一篇: js实现电影评分
推荐阅读
-
1到n中1出现的次数
-
python--剑指offer--中等--43. 1~n整数中1出现的次数
-
从1到n整数中1出现的次数
-
求1~N中1出现的次数的递归算法 博客分类: 算法相关 算法面试
-
在排序数组中,找出给定数字的出现次数.比如 [1, 2, 2, 2, 3] 中
-
C++实现(当n属于long范围时)给出一个数n,求1到n中,有多少个数不是2 5 11 13的倍数
-
(当n属于long范围时)给出一个数n,求1到n中,有多少个数不是2 5 11 13的倍数
-
计算1到N中包含数字1的个数
-
【LeeCode 中等 数学 python3】剑指 Offer 43. 1~n整数中1出现的次数
-
【剑指 Offer 53 - II】0~n-1中缺失的数字