这个题很简单,只要判断输入数之前的数是否每位相加是偶数就行。
package com.算法专练.力扣.统计各位数字之和为偶数的整数个数;
/**
* @author xnl
* @Description:
* @date: 2022/5/29 21:38
*/
public class Solution {
public static void main(String[] args) {
Solution solution = new Solution();
System.out.println(solution.countEven(30));
System.out.println();
}
public int countEven(int num) {
int size = 0;
for (int i = 2; i <= num; i++){
if (calculate(i) % 2 == 0){
size++;
}
}
return size;
}
/**
* 计算每位相加
* @param num
* @return
*/
private int calculate(int num){
if (num == 0){
return 0;
}
return num + calculate(num / 10);
}
}
做完提交看题解发现,除了这样暴力做,其实还是有规律的。
- 1-10之内,只要5个符合的结果
- 10-20,也是只有五个
- 但是20- 30是有6个的因为包括了0
- 类推,100之内,其实就是有60个
- 如果每位相加是偶数的话,那么直接除2就行,如果相加是奇数的话,先减一再除二
class Solution { public int countEven(int num) { if(((num/1000)+(num/100)+(num/10)+num)%2!=0){num-=1;} return num/2; } }