以十位数为例介绍思路
- 每100个数里面有10个数的十位为1, 也就是 (n/100)*10
- 除去整百之后(即n%100),剩下的分三种情况:(1)十位数大于1,那么还有10个数的十位为1;(2)十位数为1,那么还有(个位数+1)个数的十位为1;(3)十位数为0,那么没有十位为1的数
上述分析也可以类比到其他数位。
程序如下
public class Solution {
public int NumberOf1Between1AndN_Solution(int n) {
int count = 0;
int a, b, c;
for (int m = 1; m <= n; m *= 10) {
a = n / (10 * m);
b = n % (10 * m) / m;
c = n % m;
count += a * m + (b > 1 ? m : (b == 1 ? c + 1 : 0));
}
return count;
}
}
京公网安备 11010502036488号