【算法】1295. 统计位数为偶数的数字(多语言实现)

46 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情


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

分析

  • 面对这道算法题目,二当家的陷入了沉思。
  • 需要遍历数组是无疑的。
  • 中规中矩的方式可以是将数字转为字符串然后判断长度是否为偶数。但是这样需要创建新的字符串出来。
  • 转为字符串是为了快速判断位数,以10为底取对数,有高效的数学函数也是不错的选择。
  • 当然根据提示,我们知道每个数字的取值范围,也可以不去计算数字的位数,直接判断取值。

题解

rust

impl Solution {
    pub fn find_numbers(nums: Vec<i32>) -> i32 {
        nums.iter().filter(|&&num| {
            (num >= 10 && num <= 99)
                || (num >= 1000 && num <= 9999)
                || num == 100000
        }).count() as i32
    }
}

go

func findNumbers(nums []int) int {
    ans := 0

    for _, num := range nums {
        if (num >= 10 && num <= 99) || (num >= 1000 && num <= 9999) || num == 100000 {
            ans++
        }
    }

    return ans
}

typescript

function findNumbers(nums: number[]): number {
    return nums.filter(num => (num >= 10 && num <= 99)
		|| (num >= 1000 && num <= 9999)
		|| num == 100000).length;
};

python

class Solution:
    def findNumbers(self, nums: List[int]) -> int:
        return sum(1 for num in nums if 10 <= num <= 99 or 1000 <= num <= 9999 or num == 100000)


c

int findNumbers(int* nums, int numsSize){
    int ans = 0;

    for (int i = 0; i < numsSize; ++i) {
        if ((nums[i] >= 10 && nums[i] <= 99)
            || (nums[i] >= 1000 && nums[i] <= 9999)
            || nums[i] == 100000) {
            ++ans;
        }
    }

    return ans;
}

c++

class Solution {
public:
    int findNumbers(vector<int>& nums) {
        int ans = 0;

        for (int num: nums) {
            if ((num >= 10 && num <= 99)
                || (num >= 1000 && num <= 9999)
                || num == 100000) {
                ++ans;
            }
        }

        return ans;
    }
};

java

class Solution {
    public int findNumbers(int[] nums) {
        int ans = 0;

        for (int num : nums) {
            if ((num >= 10 && num <= 99)
                || (num >= 1000 && num <= 9999)
                || num == 100000) {
                ++ans;
            }
        }
        
        return ans;
    }
}

原题传送门:https://leetcode.cn/problems/find-numbers-with-even-number-of-digits/


非常感谢你阅读本文~
放弃不难,但坚持一定很酷~
希望我们大家都能每天进步一点点~
本文由 二当家的白帽子:https://juejin.cn/user/2771185768884824/posts 博客原创~