1 题目描述
2 算法思路
感觉是一个找数学规律的题,可以分别求出每位上1出现的次数,再相加
数学规律如下:如图
cur == 0
high * digit
cur == 1
high * digit + low + 1
cur > 1
(high + 1) * digit
3 代码
class Solution {
public int countDigitOne(int n) {
int digit = 1; //数位
int res = 0;
int high = n / 10;
int cur = n % 10;
int low = 0;
while(high != 0 || cur != 0){
if(cur == 0){
res = res + high * digit;
}else if(cur == 1){
res = res + high * digit +low + 1;
}else{
res = res + (high + 1)*digit;
}
low = low + cur * digit;
cur = high % 10;
high /= 10;
digit *= 10;
}
return res;
}
}
4 提交结果