题目描述:
输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。
思路分析:
常规思路是输入一个整数n,循环判断每个数字中1的个数,然后累加起来,但是这样在n比较大的时候,会超时,这里分享一个不错的思路:思路。
参考代码:
public int countDigitOne(int n) {
if(n < 1)return 0;
int round = n;
int base = 1;
int count = 0;
while(round > 0){
int weight = round % 10;
round /= 10;
count += round * base;
if(weight == 1)count += n % base + 1;
else if(weight > 1) count += base;
base *= 10;
}
return count;
}
(完)