剑指 Offer 43. 1~n 整数中 1 出现的次数
难度:困难
输入一个整数 n
,求1~n这n个整数的十进制表示中1出现的次数。
例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。
示例 1:
输入:n = 12
输出:5
示例 2:
输入:n = 13
输出:6
限制:
1 <= n < 2^31
注意:本题与主站 233 题相同:https://leetcode-cn.com/problems/number-of-digit-one/
解答:
class Solution {
//时间复杂度:O(logN)。空间复杂度:O(1)
public int countDigitOne(int n) {
//位因子
int digit = 1;
//结果,或者说是count
int ans = 0;
//高位
int high = n / 10;
//当前位
int cur = n % 10;
//低位
int low = 0;
while(high != 0 || cur != 0){
if(cur == 0) ans += high * digit;
else if(cur == 1) ans += high * digit + low + 1;
else ans += (high + 1) * digit;
low += cur * digit;
cur = high % 10;
high /= 10;
digit *= 10;
}
return ans;
}
}
参考自:
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/1nzheng-shu-zhong-1chu-xian-de-ci-shu-lcof/solution/mian-shi-ti-43-1n-zheng-shu-zhong-1-chu-xian-de-2/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。