【刷题笔记】1295. 统计位数为偶数的数字

146 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第32天,点击查看活动详情

题目描述

1295. 统计位数为偶数的数字 - 力扣(LeetCode)

给你一个整数数组 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

思路分析

题目要求是十进制数求位数,所以最先想到的思路就是依次除进制数10取商,然后再除,获取到做除法的次数即为位数

此处可以使用递归,也可以使用for循环, 如果是其他进制数,只需要修改结束条件和除数

题目给的条件 1< num < 10^5, 所以最多循环五次,不用考虑性能问题导致时间超时

默认位数是值1 递归结束条件就是 是否 < 10,递归体就是将当前位和之前的位数求和.求解即可


利用to_string函数可以将整数转换成字符串

然后用string类自带的求长度函数可以求出有几位

然后直接对2求余就知道是奇数还是偶数了。

AC 代码

class Solution {
public:

    int getLengthOfNumber (int num) {
    int lenght = 1;
    if (num < 10) {
        return lenght;
    }

    num = num / 10;
    lenght =  getLengthOfNumber(num) + lenght;
    return lenght;
}

    int findNumbers(vector<int>& nums) {
        int num = 0;
        
        int length = (int)nums.size();
        for (int i = 0 ; i < length; i++) {
            int length = getLengthOfNumber(nums[i]);
            if (length % 2 == 0) {
                num++;
            }
        }
        
        return num;
    }
};
class Solution {
public:
    int findNumbers(vector<int>& nums) {
        int count = 0;
        for(auto v : nums)
        {
            string x = to_string(v);
            if(x.size()%2 == 0)
                count++;
        }
        return count;
    }
};

参考

将int转为String,调用.length,然后%2==0即为偶数 - 统计位数为偶数的数字 - 力扣(LeetCode)

3种方法 - 统计位数为偶数的数字 - 力扣(LeetCode)