2180. 统计各位数字之和为偶数的整数个数
LeetCode: 2180. 统计各位数字之和为偶数的整数个数
简单 \color{#00AF9B}{简单} 简单
给你一个正整数
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:暴力枚举
枚举范围内的所有正整数。
class Solution
{
public:
int countEven(int num)
{
int count = 0;
for (int x = 2; x <= num; x++)
{
int sum = 0;
int i = x;
while (i != 0)
{
sum += i % 10;
i /= 10;
}
if ((sum & 0x01) == 0)
count++;
}
return count;
}
};
上述代码中从
x = 2
开始判断,是因为1
永远无法满足条件,所以索性直接去掉了。
复杂度分析
-
时间复杂度: O ( n l o g n ) O(n logn) O(nlogn)。其中,
n
为需要枚举的数字的数量,等同于num
。同时,判断每个正整数的各位数字之和是否为偶数需要 O ( l o g n ) O(logn) O(logn) 的时间复杂度。 -
空间复杂度: O ( 1 ) O(1) O(1)。只用到了一些变量,占用常数空间。
参考结果
Accepted
71/71 cases passed (0 ms)
Your runtime beats 100.00 % of cpp submissions
Your memory usage beats 32.18 % of cpp submissions (5.8 MB)