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,所以我们只需要考虑前两种情况。
解法分析:
直接计算法:根据数字的位数来计算逗号数量
- 如果 n < 1000,返回 0
- 如果 n >= 1000,计算从 1000 到 n 的数字个数,每个数字贡献 1 个逗号
数学公式法:通过数学公式直接计算
- 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) |