/*针对每一个数字位进行考虑,例如123N45,考虑所有N为1的数字的数目。
根据N取值,N对应为1的数目为(left为N左边的数字,right表示N右边的数字):
f(N) = left*100 (N = 0)
f(N) = left*100 + right+1 (N = 1)
f(N) = (left+1)*100 (N > 1)*/
class Solution {
public:
int countDigitOne(int n) {
if(n < 1) return 0;
long left, right, cur, i = 1, res = 0;
while(n >= i){
left = n / (i * 10);
cur = (n/i) % 10;
right = n - (n / i) * i;
if(cur == 0) res = res + left * i;
else if(cur == 1) res = res + left * i + right + 1;
else res = res + (left + 1) * i;
i *= 10;
}
return res;
}
};
LeetCode之Number of Digit One
最新推荐文章于 2020-04-24 14:12:42 发布