Leetcode 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] <= 10^5

解题思路

这个问题思路非常简单,首先不难想到将数字转为字符串,然后分别判断字符串长度即可。

class Solution:
    def findNumbers(self, nums: List[int]) -> int:
        return sum(map(lambda n: len(str(n)) % 2 == 0, nums)) 

当然这个问题可以直接使用数学解法,我们知道数字x的位数,实际上就是 l o g 10 x + 1 log_{10}^x+1

class Solution:
    def findNumbers(self, nums: List[int]) -> int:
        return sum(map(lambda n: int(math.log(n, 10) + 1) % 2 == 0, nums)) 

当然你可以采用log的定义,手动去实现一个类似的功能。

class Solution:
    def findNumbers(self, nums: List[int]) -> int:
        res = 0
        for n in nums:
            x = 0
            while n:
                n //= 10
                x += 1
            
            if x % 2 == 0:
                res += 1
        return res

我将该问题的其他语言版本添加到了我的GitHub Leetcode

如有问题,希望大家指出!!!

发布了706 篇原创文章 · 获赞 443 · 访问量 81万+

猜你喜欢

转载自blog.csdn.net/qq_17550379/article/details/103726382