leetcode233 & 剑指 Offer 43. 1~n 整数中 1 出现的次数

整数中 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

解题思路

官方题解链接

代码

class Solution {
    
    
    public int countDigitOne(int n) {
    
    
        //10^k
        long mulk = 1;
        int res = 0;
        for (int k = 0; mulk <= n; k++) {
    
    
        	//分别求出个位,十位,百位,千位...上一的个数。
            res += n / (mulk * 10) * mulk + Math.min(Math.max(n % (mulk * 10) - mulk + 1, 0), mulk);
            mulk *= 10;
        }
        return res;
    }
}

时间复杂度

O(n)

猜你喜欢

转载自blog.csdn.net/qq_43478625/article/details/121432866