本文共 748 字,大约阅读时间需要 2 分钟。
输入一个整数 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的时候如下图所示。逐个计算每一位然后相加得到最终的结果。
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; }}
转载地址:http://etgji.baihongyu.com/