首页 > 其他分享 >力扣每日一题2023.1.6---2180. 统计各位数字之和为偶数的整数个数

力扣每日一题2023.1.6---2180. 统计各位数字之和为偶数的整数个数

时间:2023-01-07 01:44:20浏览次数:43  
标签:力扣 各位 10 int res 偶数 --- 2023.1 num

给你一个正整数 num ,请你统计并返回 小于或等于 num 且各位数字之和为 偶数 的正整数的数目。
正整数的 各位数字之和 是其所有位上的对应数字相加的结果。

示例 1:
输入:num = 4
输出:2
解释:
只有 2 和 4 满足小于等于 4 且各位数字之和为偶数。    

示例 2:
输入:num = 30
输出:14
解释:
只有 14 个整数满足小于等于 30 且各位数字之和为偶数,分别是:
2、4、6、8、11、13、15、17、19、20、22、24、26 和 28 。

提示:
    1 <= num <= 1000
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/count-integers-with-even-digit-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

简单到没意思两天,然后难到不会三天,接着又是简单到没意思,神奇。

由于数据量不大,先暴力解一遍试试

代码如下:

class Solution {
    public int countEven(int num) {
        int res = 0;
        for (int i = 1; i <= num; i ++) {
            int x = i;
            int sum = 0;
            while (x != 0) {
                sum += x % 10;
                x /= 10;
            }
            if (sum % 2 == 0) {
                res ++;
            }
        }
        return res;
    }
}

运行结果:

暴力解运行结果

 

可以利用数学方法进行优化,分析明天有时间了补上。

代码如下:

class Solution {
    public int countEven(int num) {
        int y = num / 10;
        int x = num % 10;
        int res = y * 5, ySum = 0;
        while (y != 0) {
            ySum += y % 10;
            y /= 10;
        }
        if (ySum % 2 == 0) {
            res += x / 2 + 1;
        } else {
            res += (x + 1) / 2;
        }
        return res - 1;
    }
}

优化

 

标签:力扣,各位,10,int,res,偶数,---,2023.1,num
From: https://www.cnblogs.com/allWu/p/17032041.html

相关文章