Easy

题目描述

给定一个整数 n。

返回在标准数字格式中写出范围 [1, n](包含边界)内所有整数时使用的逗号总数。

在标准格式中:

  • 从右边开始每三位数字后插入一个逗号
  • 少于 4 位数字的数字不包含逗号

示例 1:

输入:n = 1002
输出:3
解释:数字 "1,000"、"1,001" 和 "1,002" 每个都包含一个逗号,总共 3 个。

示例 2:

输入:n = 998
输出:0
解释:从 1 到 998 的所有数字都少于四位数。因此,没有使用逗号。

约束条件:

  • 1 <= n <= 10^5

提示:

  • 范围 [1000, 100000] 内的数字有一个逗号。

解题思路

这道题需要统计从 1 到 n 范围内所有数字在标准格式化下使用的逗号总数。

根据题目描述和提示,我们可以得出规律:

  • 1-999:没有逗号(少于4位数)
  • 1000-99999:每个数字有1个逗号(4-5位数)
  • 100000-999999:每个数字有2个逗号(6位数)

由于约束条件限制 n <= 10^5,所以我们只需要考虑前两种情况。

解法分析:

  1. 直接计算法:根据数字的位数来计算逗号数量

    • 如果 n < 1000,返回 0
    • 如果 n >= 1000,计算从 1000 到 n 的数字个数,每个数字贡献 1 个逗号
  2. 数学公式法:通过数学公式直接计算

    • 4位数(1000-9999):每个数字 1 个逗号
    • 5位数(10000-99999):每个数字 1 个逗号
    • 由于题目限制,最大只到 100000(5位数)

推荐使用直接计算法,思路清晰且实现简单。

代码实现

class Solution {
public:
    int countCommas(int n) {
        if (n < 1000) {
            return 0;
        }
        return n - 999;
    }
};
class Solution:
    def countCommas(self, n: int) -> int:
        if n < 1000:
            return 0
        return n - 999
public class Solution {
    public int CountCommas(int n) {
        if (n < 1000) {
            return 0;
        }
        return n - 999;
    }
}
/**
 * @param {number} n
 * @return {number}
 */
var countCommas = function(n) {
    if (n < 1000) {
        return 0;
    }
    return n - 999;
};

复杂度分析

复杂度类型
时间复杂度O(1)
空间复杂度O(1)