class Solution {
public int countDigitOne(int n) {
/*
digit: 当前处在第几位 (个位: 1, 十位: 10)
cur: 当前位的数值
high: 高位的数值
low: 低位的数值
countOne: 当前位1出现的次数
例: 若n为3201,当前digit为10,则
cur = 0, high = 32, low = 1
*/
int digit = 1, cur = n % 10, high = n / 10, low = 0;
int countOne = 0;
while (cur != 0 || high != 0){
if (cur == 0){
countOne += high * digit;
} else if (cur == 1){
countOne += high * digit + low + 1;
} else {
countOne += (high + 1) * digit;
}
low += cur * digit;
cur = high % 10;
high /= 10;
digit *= 10;
}
return countOne;
}
}
Leetcode剑指 Offer 43. 1~n 整数中 1 出现的次数
最新推荐文章于 2022-08-19 12:10:55 发布