1~n整数中1出现的次数(中等)
2020年9月4日
题目来源:力扣
解题
看路飞大佬的题解理解,这个规律一理解就好做了
class Solution {
public int countDigitOne(int n) {
//初始化各个参数
//高位
int high=n/10;
//当前位
int cur=n%10;
//低位
int low=0;
//位数
int digit=1;
//结果
int res=0;
//当高位和当前位不为0的时候
while(high!=0 || cur!=0){
if(cur==0){//如果当前位为0
res+=high*digit;
}else if(cur==1){//如果当前位为1
res+=high*digit+low+1;
}else{//如果当前位为2~9
res+=(high+1)*digit;
}
//参数重置
//低位
low+=cur*digit;
//当前位
cur=high%10;
//高位
high/=10;
//位数
digit*=10;
}
return res;
}
}