「这是我参与2022首次更文挑战的第29天,活动详情查看:2022首次更文挑战」。
题目描述:
1295. 统计位数为偶数的数字 - 力扣(LeetCode) (leetcode-cn.com)
给你一个整数数组 nums,请你返回其中位数为 偶数 的数字的个数。
示例一
输入:nums = [12,345,2,6,7896]
输出:2
解释:
12 是 2 位数字(位数为偶数)
345 是 3 位数字(位数为奇数)
2 是 1 位数字(位数为奇数)
6 是 1 位数字 位数为奇数)
7896 是 4 位数字(位数为偶数)
因此只有 12 和 7896 是位数为偶数的数字
示例二
输入: nums = [555,901,482,1771]
输出: 1
解释:
只有 1771 是位数为偶数的数字。
提示:
1 <= nums.length <= 5001 <= nums[i] <= 10^5
思路分析
遍历 + 字符串
很明显遍历是逃不掉的,要求数字的位数,有个简单的办法就是利用sdk的方法,数字转为string之后,求得string的长度即可。
AC代码
class Solution {
fun findNumbers(nums: IntArray): Int {
var ans = 0
for (i in nums){
if (i.toString().length%2==0){
ans++
}
}
return ans
}
}
数学法
这个是看了官解的,直接摘抄下了
我们也可以使用语言内置的以 为底的对数函数 来得到整数 x 包含的数字个数。
一个包含
k个数字的整数x满足不等式 将不等式取对数,得到 ,因此我们可以用 得到x包含的数字个数 k,其中 表示将 aa 进行下取整,例如 。
AC代码
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;
}
};
总结
虽然是简单题,但是解法还是蛮多的,还可以通过不断除以10,看结果为0的时候除以的次数来判断,也算是数学法吧。
参考
统计位数为偶数的数字 - 统计位数为偶数的数字 - 力扣(LeetCode) (leetcode-cn.com)
Kotlin解法 - 统计位数为偶数的数字 - 力扣(LeetCode) (leetcode-cn.com)
【C++】统计位数为偶数的数字(3种方法实现) - 统计位数为偶数的数字 - 力扣(LeetCode) (leetcode-cn.com)