Skip to content

Latest commit

 

History

History
184 lines (145 loc) · 4.63 KB

1295.md

File metadata and controls

184 lines (145 loc) · 4.63 KB
title description keywords
1295. 统计位数为偶数的数字
LeetCode 1295. 统计位数为偶数的数字题解,Find Numbers with Even Number of Digits,包含解题思路、复杂度分析以及完整的 JavaScript 代码实现。
LeetCode
1295. 统计位数为偶数的数字
统计位数为偶数的数字
Find Numbers with Even Number of Digits
解题思路
数组
数学

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

🟢 Easy  🔖  数组 数学  🔗 力扣 LeetCode

题目

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),使用了常量级空间。

代码

::: code-tabs @tab 按位数计算

/**
 * @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;
};

@tab 按区间范围判断

/**
 * @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 判断是否可以赢得数字游戏 数组 数学 🟢 🀄️ 🔗