2180.统计各位数字之和为偶数的整数个数
链接:2180.统计各位数字之和为偶数的整数个数
难度:Easy
标签:数学、模拟
简介:给你一个正整数 num ,请你统计并返回 小于或等于 num 且各位数字之和为 偶数 的正整数的数目。
题解 1 - typescript
- 编辑时间:2023-01-06
- 执行用时:92ms
- 内存消耗:48.3MB
- 编程语言:typescript
- 解法介绍:遍历。
function countEven(num: number): number {
  return new Array(num)
    .fill(0)
    .map((_, i) =>
      (i + 1)
        .toString()
        .split('')
        .map(v => +v)
        .reduce((sum, cur) => sum + cur, 0)
    )
    .reduce((sum, cur) => sum + Number(cur % 2 == 0), 0);
}
题解 2 - cpp
- 编辑时间:2023-01-06
- 执行用时:4ms
- 内存消耗:5.8MB
- 编程语言:cpp
- 解法介绍:dfs。
class Solution {
public:
    int countEven(int num) {
        function<int(int, int)> dfs = [&](int cur, int sum) -> int {
            if (cur > num) return 0;
            int ans = !(sum & 1);
            for (int i = 0; i <= 9; i++) {
                if (cur * 10 + i == cur) continue;
                ans += dfs(cur * 10 + i, sum + i);
            }
            return ans;
        };
        return dfs(0, 0) - 1;
    }
};
题解 3 - rust
- 编辑时间:2023-01-06
- 内存消耗:1.9MB
- 编程语言:rust
- 解法介绍:同上。
impl Solution {
    pub fn count_even(num: i32) -> i32 {
        return Solution::dfs(num, 0, 0) - 1;
    }
    fn dfs(num: i32, cur: i32, sum: i32) -> i32 {
        if cur > num {
            0
        } else {
            let mut ans = if sum % 2 == 0 { 1 } else { 0 };
            for i in 0..=9 {
                if cur * 10 + i == cur {
                    continue;
                }
                ans += Solution::dfs(num, cur * 10 + i, sum + i);
            }
            ans
        }
    }
}