[LeetCode] 1295. Find Numbers with Even Number of Digits 统计位数为偶数的数字

2022/4/24 6:13:55

本文主要是介绍[LeetCode] 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:

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:

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] <= 105

这道题给了一个数组,让找出多少个偶数位的数字,所谓偶数位的数字,就是说该多位数要有偶数个位,比如个数位就不是偶数位数字,而十位数就是。其实这道题就是考察如何统计整数的位数,比较简单直接的方法就是进行一个 while 循环,每次都除以 10,直到原数字变为0为止,这样就知道位数了。可以对数组中的每个数字都进行如下的操作,就可以知道是否是偶数位的数字了,参见代码如下:


解法一:

class Solution {
public:
    int findNumbers(vector<int>& nums) {
        int res = 0;
        for (int num : nums) {
            int cnt = 0;
            while (num > 0) {
                ++cnt;
                num /= 10;
            }
            res += (cnt % 2 == 0);
        }
        return res;
    }
};

再来看一种比较高级的解法,运用到了对数计算,数字进行以10为底的对数运算,若得到奇数,则表示原数字是偶数位的,这样就省去了 while 循环的操作,可以进行快速的判断,参见代码如下:


解法二:

class Solution {
public:
    int findNumbers(vector<int>& nums) {
        int res = 0;
        for (int num : nums) {
            res += (int)log10(num) & 1;
        }
        return res;
    }
};

再来看一种涉嫌 cheating 的解法,由于题目中给定了数字的范围,不超过 10^5,那么偶数位的数字其实是有固定的范围的,分别为 [10, 99],[1000, 9999],和 100000,只要对这些范围进行直接判断,就知道是否是偶数位了,参见代码如下:


解法三:

class Solution {
public:
    int findNumbers(vector<int>& nums) {
        int res = 0;
        for (int num : nums) {
            if ((num > 9 && num < 100) || (num > 999 && num < 10000) || num == 100000) ++res;
        }
        return res;
    }
};

Github 同步地址:

https://github.com/grandyang/leetcode/issues/1295


类似题目:

Finding 3-Digit Even Numbers


参考资料:

https://leetcode.com/problems/find-numbers-with-even-number-of-digits/

https://leetcode.com/problems/find-numbers-with-even-number-of-digits/discuss/521567/C%2B%2B-solution-with-log-and-bit-manipulation

https://leetcode.com/problems/find-numbers-with-even-number-of-digits/discuss/459489/JAVA-solution-with-100-better-space-and-Time


LeetCode All in One 题目讲解汇总(持续更新中...)



这篇关于[LeetCode] 1295. Find Numbers with Even Number of Digits 统计位数为偶数的数字的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程