1295. Find Numbers with Even Number of Digits

1295. Find Numbers with Even Number of Digits

题目

Given an array nums of integers, return how many of them contain an even number of digits.

Example 1:

1
2
3
4
5
6
7
8
9
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:

1
2
3
4
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

解题

思路:题目的关键点在于如何计数一个整数的位数。Hint给出的方法是:Divide the number by 10 again and again to get the number of digits。我想到的是把整数转化为string类型,因为python种字符串类型是可迭代的,可以直接用len()计数位数。

我的代码:

1
2
3
4
5
6
7
class Solution(object):
def findNumbers(self, nums):
sum = 0
for num in nums:
if len(str(num))%2 == 0:
sum += 1
return sum

别人更简洁的代码:

1
2
3
class Solution(object):
def findNumbers(self, nums):
return sum(len(str(n)) % 2 == 0 for n in nums)

但是虽然第二种代码更简洁,但似乎时空复杂度是差不多的。

总结

  1. sum函数

    1
    sum(iterable[, start])
  • iterable – 可迭代对象,如:列表、元组、集合。
  • start – 指定相加的参数,如果没有设置这个值,默认为0。

经常看见一些简单的代码是用了sum函数求和生成器

此处遍历了nums,判断有几个元素的len(str(n)) % 2 == 0结果为True