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;
}
}
相关文章
- 12-19剑指offer三十一之连数中1出现的次数(从1到n整数中1出现的次数
- 12-19剑指Offer(三十一):整数中1出现的次数(从1到n整数中1出现的次数)
- 12-19剑指 Offer 53 - II. 0~n-1中缺失的数字
- 12-19剑指 Offer 53 - II. 0~n-1中缺失的数字
- 12-19剑指 Offer 53 - II. 0~n-1中缺失的数字
- 12-19剑指 Offer 53 - II. 0~n-1中缺失的数字(二分检索)
- 12-19剑指 Offer 53 - II. 0~n-1中缺失的数字 + 二分法
- 12-19【剑指Offer-53-II】0~n-1中缺失的数字
- 12-19剑指 Offer 53 - II. 0~n-1中缺失的数字
- 12-19剑指 Offer 53 - II. 0~n-1中缺失的数字