开发者

C/C++题解LeetCode1295统计位数为偶数的数字

目录
  • 题目描述
  • 思路分析
  • AC 代码
  • 将int转为String
    • 代码
  • 3种方法 - 统计位数为偶数的数字

    题目描述

    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;
       javascript if (num < 10) {
            return lenght;
        }
        num = num /android 10;
        lenght =  getLengthOfNumber(num) + lenght;
        return lenght;
    }
        int findNumbers(vector<int>& nums) {
            int num = 0;
            int length = (inpythont)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++;
            }
           p开发者_Go开发hp return count;
        }
    };
    

    将int转为String

    调用.length,然后%2==0即为偶数 - 统计位数为偶数的数字

    代码

    class Solution {
        public int findNumbers(int[] nums) {
            int res=0;
            for(int i:numsjs){
                if(String.valueOf(i).length()%2==0){
                    res++;
                }
            }
    ​​​​​​​        return res;
        }
    }
    

    3种方法 - 统计位数为偶数的数字

    1. 把数字转成字符串

    public int findNumbers(int[] nums) {
        int count = 0;
        for (int i = 0; i < nums.length; i++) {
            if (String.valueOf(nums[i]).length() % 2 == 0) {
                count++;
            }
        }
        return count;
    }
    

    2. 数字循环除10,统计等于0的时候除10的次数,偶数次则该数为偶数位

    public int findNumbers(int[] nums) {
        int count = 0;
        for (int i = 0; i < nums.length; i++) {
            int N = nums[i];
            //记录除10的次数
            int countTen = 0;
            while (N != 0) {
                N/=10;
                countTen++;
            }
            //如果除10的次数是偶数次,则该数为偶数位数
            if (countTen % 2 == 0) {
                count++;
            }
        }
        return count;
    }
    

    3. 已知范围为1 <= nums[i] <= 10^5,所以只有两个区间内的数为偶数位10~99以及1000~9999

    public int findNumbers(int[] nums) {
        int count=0;
        for(int i=0;i<nums.length;++i){
            if((nums[i]>=10&&nums[i]<100)||(nums[i]>=1000&&nums[i]<10000))
                count++;
        }
        return count;        
    }
    

    以上就是C/C++题解LeetCode1295统计位数为偶数的数字的详细内容,更多关于C/C++统计位数为偶数字的资料请关注我们其它相关文章!

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜