2180.统计各位数字之和为偶数的整数个数

【LetMeFly】2180.统计各位数字之和为偶数的整数个数

力扣题目链接:https://leetcode.cn/problems/count-integers-with-even-digit-sum/

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

方法一:遍历模拟

我们只需要从1到num遍历一遍(使用变量i来遍历),对于每个正在遍历的数,统计这个数在十进制下的各位数之和(如果是偶数则答案数量加一)

怎么计算一个数在十进制下每一位之和呢?

很简单,在这个数不为0时,不断取出这个数的个位(这个数对10取模),然后将这个数除以10(并向下取整)即可(这样相当于是丢掉了各个位)。

1
2
3
4
5
6
7
// 统计thisNum在十进制下的各位数之和
int cnt = 0;
while (thisNum) {
cnt += thisNum % 10;
thisNum /= 10;
}
ans += cnt % 2 == 0;
  • 时间复杂度$O(num\times \log(num))$
  • 空间复杂度$O(1)$

AC代码

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution {
public:
int countEven(int num) {
int ans = 0;
for (int i = 1; i <= num; i++) {
int cnt = 0, thisNum = i;
while (thisNum) {
cnt += thisNum % 10;
thisNum /= 10;
}
ans += cnt % 2 == 0;
}
return ans;
}
};

同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/128583772


2180.统计各位数字之和为偶数的整数个数
https://blog.letmefly.xyz/2023/01/06/LeetCode 2180.统计各位数字之和为偶数的整数个数/
作者
Tisfy
发布于
2023年1月6日
许可协议