筹备复试算法练习打卡的第一天,刚好力扣今天的是简单题,就顺便写出个题解出来把,也学习一下c++。
题目:
给你一个正整数 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小即可,然后开始取不断取个位数和十位数(如果有的话)将它们相加,加在一起如果是偶数的话,那么便符合答案要求,此时ans数量加一,最终返回ans即可。此题还可以将遍历的过程写到函数中,相对来说也方便一些,例如题解2
题解1:
class Solution {
public:
int countEven(int num) {
int ans = 0; //答案数量
for (int i = 1; i <= num; i++) { //遍历不大于题目要求的num
int count = 0, Numb = i;
//开始循环遍历数字,除等10取出每次的个位数然后进行计算,求出每一位数相加
while (Numb) {
count += Numb % 10;
Numb /= 10;
}
//若每一位数相加得出来是偶数,则ans加一
ans += count % 2 == 0;
}
return ans;
}
};
题解2:
class Solution {
public:
int isVaild( int n ){
int res = 0;
while( n ){
res += n%10;
n/=10;
}
return res;
}
int countEven(int num) {
//返回 1-num 的各位数字之和为偶数的数目
int cnt = 0;
for( int i = 1;i <= num;i++ ){
if( isVaild(i)%2==0 ) cnt++;
}
return cnt;
}
};