1~n整数中1出现的次数
题目
输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。
例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。
示例
输入:n = 12
输出:5
题解
计算总共出现1的次数,我们可以将其分解为先定义一个当前位cur,然后计算当前位为1的时候总共可能出现的次数,会出现3中情况,分别是当前为大于1、等于1、小于1的时候如下图所示。逐个计算每一位然后相加得到最终的结果。
代码(Java)
class Solution {
public int countDigitOne(int n) {
long base=1;
int ans=0;
long a,b,cur;
while(base<=n){
a=(n/base)/10;
b=n%base;
cur=(n/base)%10;
if(cur>1){
ans+=(a+1)*base;
}else if(cur==1){
ans+=(a*base+b+1);
}else{
ans+=a*base;
}
base=base*10;
}
return ans;
}
}
- 注意:此处的base、a、b、cur用了long类型,不然会出现个别大的数溢出而不能全部通过样例。但是python中就不用考虑,python会自动转换为长整型。