问题

例子
思路
暴力法超时(两个for)

-
方法1
$$$$
-
方法2
$$$$
代码
//方法1
class Solution {
public int countDigitOne(int n) {
int res=0,i=1,num=n;
while(num>0){
if(num%10==0) res+=(num/10)*i;
if(num%10==1) res+=(num/10)*i+1+n%i;
if(num%10>1) res+=(num/10)*i+i;
num/=10;
i*=10;
}
return res;
//方法2

本文探讨了在从1到n的整数中,数字1出现的次数的计算方法。通过深入分析,提出了一种高效的算法,避免了暴力法的超时问题。该算法通过对数字的位数进行迭代,利用数学规律,有效地计算出了所有数字中1的总数。
2503

被折叠的 条评论
为什么被折叠?



