1295. 统计位数为偶数的数字
大约 2 分钟
---
1295. 统计位数为偶数的数字
- 标签:数组、数学
- 难度:简单
题目链接
题目大意
描述:给你一个整数数组 。
要求:返回其中包含偶数个数位的数字的个数。
说明:
- 。
- 。
示例:
- 示例 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:数字转字符串
1. 核心思想
最简单的做法:把每个数字转成字符串,字符串的长度就是这个数的位数。检查长度是否为偶数即可。
2. 具体步骤
第 1 步:初始化计数器 。
第 2 步:遍历数组中的每个数字 :
- 使用
str(num)将数字转为字符串。 - 用
len()获取字符串长度,即该数字的位数。 - 如果长度是偶数,。
第 3 步:返回 。
思路 1:代码
class Solution:
def findNumbers(self, nums: List[int]) -> int:
ans = 0
for num in nums:
# 转成字符串,判断位数是否为偶数
if len(str(num)) % 2 == 0:
ans += 1
return ans思路 1:复杂度分析
- 时间复杂度:,其中 是数组长度。每个数字转字符串的时间与其位数成正比,但 ,最多 位,所以可视为常数时间。
- 空间复杂度:。
思路 2:数学方法
1. 核心思想
不依赖字符串,用数学方法直接计算位数。一个十进制正整数 的位数可以通过以下公式计算:
例如 ,向下取整为 ,加 得 ,即 有 位。
2. 具体步骤
第 1 步:导入 math 模块。
第 2 步:遍历数组,对每个数字 :
- 计算 得到位数。
- 判断位数是否为偶数。
第 3 步:返回计数。
思路 2:代码
import math
class Solution:
def findNumbers(self, nums: List[int]) -> int:
ans = 0
for num in nums:
# 用对数计算位数
digits = int(math.log10(num)) + 1
if digits % 2 == 0:
ans += 1
return ans思路 2:复杂度分析
- 时间复杂度:,其中 是数组长度。
- 空间复杂度:。