2180. 统计各位数字之和为偶数的整数个数
题意:
给你一个正整数 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
暴力版解题思路:
- 理解题目:
num
的每个数位,也就是全部数加起来为偶数即可
- 思路:
- 算出num中每个数位之和,然后判断是否位偶数即可
代码:
class Solution {
public:
int count(int num)
{
int sum = 0;
while(num)
{
sum += num % 10;
num /= 10;
}
return sum;
}
int countEven(int num)
{
int res = 0;
while(num)
{
if(count(num) % 2 == 0)
++res;
num--;
}
return res;
}
};
数学知识版解题思路:
- 理解题目:
num
的每个数位,也就是全部数加起来为偶数即可- 从0-9.肯定是有一半加起来是偶数的.
- 枚举几个后你就能发现,就只需要判断最后一个数的位置即可.
- 思路:
- 算出最后一位是偶数还是奇数
- 如果是偶数,那么结果就为 num/2;
- 如果是奇数,那么结果就为 (num - 1) / 2;
- 算出最后一位是偶数还是奇数
class Solution {
public:
int countEven(int num) {
int sum = 0;
int a = num;
while (a != 0) {
sum += a%10;
a = a/10;
}
if (sum%2 == 0)
return num/2;
else
return (num - 1) / 2;
}
};