1295. 统计位数为偶数的数字
1295. 统计位数为偶数的数字
题目
Given an array nums
of integers, return how many of them contain an even number of digits.
Example 1:
Input: nums = [12,345,2,6,7896]
Output: 2
Explanation: 12 contains 2 digits (even number of digits).
345 contains 3 digits (odd number of digits).
2 contains 1 digit (odd number of digits).
6 contains 1 digit (odd number of digits).
7896 contains 4 digits (even number of digits).
Therefore only 12 and 7896 contain an even number of digits.
Example 2:
Input: nums = [555,901,482,1771]
Output: 1
Explanation:
Only 1771 contains an even number of digits.
Constraints:
1 <= nums.length <= 500
1 <= nums[i] <= 10^5
题目大意
给你一个整数数组 nums
,请你返回其中位数为 偶数 的数字的个数。
示例 1:
输入: nums = [12,345,2,6,7896]
输出: 2
解释: 12 是 2 位数字(位数为偶数)
345 是 3 位数字(位数为奇数)
2 是 1 位数字(位数为奇数)
6 是 1 位数字 位数为奇数)
7896 是 4 位数字(位数为偶数)
因此只有 12 和 7896 是位数为偶数的数字
示例 2:
输入: nums = [555,901,482,1771]
输出: 1
解释:
只有 1771 是位数为偶数的数字。
提示:
1 <= nums.length <= 500
1 <= nums[i] <= 10^5
解题思路
思路一:按位数计算
使用一个辅助函数 getDigitsLength
来计算数字的位数。 通过对数字 num
不断取整(Math.floor(num / 10)
),累加位数,最后检查其位数是否为偶数。
复杂度分析
- 时间复杂度:
O(n * log_10(max_num))
,其中n
是数组长度,max_num
是数组中的最大值。- 计算每个数字的位数需要
O(log_10(num))
,一共计算n
次。
- 计算每个数字的位数需要
- 空间复杂度:
O(1)
,使用了常量级空间。
思路二:按区间范围判断
由于题目规定:1 <= nums[i] <= 10^5
,偶数位数字只能出现在特定范围内:
- 2 位数:10 到 99
- 4 位数:1000 到 9999
- 6 位数:100000
可以使用范围判断,直接统计满足条件的数字个数。
复杂度分析
- 时间复杂度:
O(n)
,遍历一次数组。 - 空间复杂度:
O(1)
,使用了常量级空间。
代码
/**
* @param {number[]} nums
* @return {number}
*/
var findNumbers = function (nums) {
const getDigitsLength = (num) => {
let len = 0;
while (num > 0) {
len++;
num = Math.floor(num / 10);
}
return len;
};
let res = 0;
for (let num of nums) {
if (getDigitsLength(num) % 2 === 0) {
res++;
}
}
return res;
};
/**
* @param {number[]} nums
* @return {number}
*/
var findNumbers = function (nums) {
let count = 0;
for (let num of nums) {
if (
(num > 9 && num < 100) ||
(num > 999 && num < 10000) ||
num === 100000
) {
count++;
}
}
return count;
};
相关题目
题号 | 标题 | 题解 | 标签 | 难度 | 力扣 |
---|---|---|---|---|---|
2094 | 找出 3 位偶数 | [✓] | 数组 哈希表 枚举 1+ | 🟢 | 🀄️ 🔗 |
2595 | 奇偶位数 | 位运算 | 🟢 | 🀄️ 🔗 | |
3232 | 判断是否可以赢得数字游戏 | 数组 数学 | 🟢 | 🀄️ 🔗 |