1295. 统计位数为偶数的数字
题目描述
给你一个整数数组 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] <= 105
解法
方法一:模拟
我们遍历数组 $\textit{nums}$ 中的每个元素,对于当前遍历到的元素 $x$,我们直接将其转换为字符串,然后判断其长度是否为偶数即可。若是则将答案加一。
遍历结束后,我们返回答案即可。
时间复杂度 $O(n \times \log M)$,空间复杂度 $O(\log M)$。其中 $n$ 是数组 $\textit{nums}$ 的长度,而 $M$ 是数组 $\textit{nums}$ 中的元素的最大值。
Python3
class Solution:
def findNumbers(self, nums: List[int]) -> int:
return sum(len(str(x)) % 2 == 0 for x in nums)
Java
class Solution {
public int findNumbers(int[] nums) {
int ans = 0;
for (int x : nums) {
if (String.valueOf(x).length() % 2 == 0) {
++ans;
}
}
return ans;
}
}
C++
class Solution {
public:
int findNumbers(vector<int>& nums) {
int ans = 0;
for (int& x : nums) {
ans += to_string(x).size() % 2 == 0;
}
return ans;
}
};
Go
func findNumbers(nums []int) (ans int) {
for _, x := range nums {
if len(strconv.Itoa(x))%2 == 0 {
ans++
}
}
return
}
TypeScript
function findNumbers(nums: number[]): number {
return nums.filter(x => x.toString().length % 2 === 0).length;
}
Rust
impl Solution {
pub fn find_numbers(nums: Vec<i32>) -> i32 {
nums.iter().filter(|&x| x.to_string().len() % 2 == 0).count() as i32
}
}
JavaScript
/**
* @param {number[]} nums
* @return {number}
*/
var findNumbers = function (nums) {
return nums.filter(x => x.toString().length % 2 === 0).length;
};
C#
public class Solution {
public int FindNumbers(int[] nums) {
return nums.Count(x => x.ToString().Length % 2 == 0);
}
}