44.从1到n整数中1出现的次数
输入一个整数 n,求从 1 到 n 这 n 个整数的十进制表示中 1 出现的次数。
例如输入 12,从 1 到 12 这些整数中包含 “1” 的数字有 1,10,11 和 12,其中 “1” 一共出现了 5 次。
数据范围:
1≤n≤109
样例:
输入: 12
输出: 5
代码:
详细题解地址:https://www.acwing.com/solution/content/124129/
class Solution {
public int numberOf1Between1AndN_Solution(int n) {
//若个位等于0,则1出现次数为a*1
//若个位大于等于1,则1出现次数为a*1+1
int res = n/10+(n%10>=1?1:0);
for(int i = 10;i<=n;i*=10){
int a = n/i/10,b = n%i;
//若当前位为0,则1出现次数为a*i
res += a*i;
//若当前位大于1,则1出现次数为a*i+i
if(n/i%10>1)res+=i;
//若当前位等于1,则1出现次数为a*i+b+1
else if(n/i%10==1)res+=b+1;
}
return res;
}
}

浙公网安备 33010602011771号