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

Raphael Liu Lv10

给你一个整数数组 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

方法一:枚举 + 字符串

我们枚举数组 nums 中的整数,并依次判断每个整数 x 是否包含偶数个数字。

一种简单的方法是使用语言内置的整数转字符串函数,将 x 转换为字符串后,判断其长度是否为偶数即可。

[sol1-C++]
1
2
3
4
5
6
7
8
9
10
11
12
class Solution {
public:
int findNumbers(vector<int>& nums) {
int ans = 0;
for (int num: nums) {
if (to_string(num).size() % 2 == 0) {
++ans;
}
}
return ans;
}
};
[sol1-C++17]
1
2
3
4
5
6
7
8
class Solution {
public:
int findNumbers(vector<int>& nums) {
return accumulate(nums.begin(), nums.end(), 0, [](int ans, int num) {
return ans + (to_string(num).size() % 2 == 0);
});
}
};
[sol1-Python3]
1
2
3
class Solution:
def findNumbers(self, nums: List[int]) -> int:
return sum(1 for num in nums if len(str(num)) % 2 == 0)

复杂度分析

  • 时间复杂度:O(N),其中 N 是数组 nums 的长度。这里假设将整数转换为字符串的时间复杂度为 O(1)。

  • 空间复杂度:O(1)。

方法二:枚举 + 数学

我们也可以使用语言内置的以 10 为底的对数函数 log10() 来得到整数 x 包含的数字个数。

一个包含 k 个数字的整数 x 满足不等式 10^{k-1} \leq x < 10^k。将不等式取对数,得到 k - 1 \leq \log_{10}(x) < k,因此我们可以用 k = \lfloor\log_{10}(x) + 1\rfloor 得到 x 包含的数字个数 k,其中 \lfloor a \rfloor 表示将 a 进行下取整,例如 \lfloor 5.2 \rfloor = 5。

[sol2-C++]
1
2
3
4
5
6
7
8
9
10
11
12
class Solution {
public:
int findNumbers(vector<int>& nums) {
int ans = 0;
for (int num: nums) {
if ((int)(log10(num) + 1) % 2 == 0) {
++ans;
}
}
return ans;
}
};
[sol2-C++17]
1
2
3
4
5
6
7
8
class Solution {
public:
int findNumbers(vector<int>& nums) {
return accumulate(nums.begin(), nums.end(), 0, [](int ans, int num) {
return ans + ((int)(log10(num) + 1) % 2 == 0);
});
}
};
[sol2-Python3]
1
2
3
class Solution:
def findNumbers(self, nums: List[int]) -> int:
return sum(1 for num in nums if int(math.log10(num) + 1) % 2 == 0)

复杂度分析

  • 时间复杂度:O(N),其中 N 是数组 nums 的长度。

  • 空间复杂度:O(1)。

 Comments
On this page
1295-统计位数为偶数的数字