跳至主要內容

1295. 统计位数为偶数的数字


1295. 统计位数为偶数的数字

🟢   🔖  数组 数学  🔗 力扣open in new window LeetCodeopen in new window

题目

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;
};

相关题目

题号标题题解标签难度力扣
2094找出 3 位偶数[✓]数组 哈希表 枚举 1+🟢🀄️open in new window 🔗open in new window
2595奇偶位数位运算🟢🀄️open in new window 🔗open in new window
3232判断是否可以赢得数字游戏数组 数学🟢🀄️open in new window 🔗open in new window