Given an integer n, count the total number of digit 1 appearing in all non-negative integers less than or equal to n.
For example:
Given n = 13,
Return 6, because digit 1 occurred in the following numbers: 1, 10, 11, 12, 13.
public class Solution {
public int countDigitOne(int n) {
long res = 0;
int left = n;
int right = 0;
int base = 1;
while (left > 0) {
int cur = left % 10;
left = left / 10;
right = n % base;
if (cur == 1) {
res += left * base;
res += right + 1;
} else if (cur == 0) {
res += left * base;
} else {
res += (left+1) * base;
}
right = cur * base + right;
base = base * 10;
}
return (int) res;
}
}
本文提供了一个算法,用于计算小于等于n的所有非负整数中1的总数。通过遍历每个数的每一位,并根据当前位的值调整总计数,实现了高效计算。
2512

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



