跳至主要內容

2180. 统计各位数字之和为偶数的整数个数


2180. 统计各位数字之和为偶数的整数个数

🟢   🔖  数学 模拟  🔗 力扣open in new window LeetCodeopen in new window

题目

Given a positive integer num, return the number of positive integers less than or equal to num whose digit sums are even.

The digit sum of a positive integer is the sum of all its digits.

Example 1:

Input: num = 4

Output: 2

Explanation:

The only integers less than or equal to 4 whose digit sums are even are 2 and 4.>

Example 2:

Input: num = 30

Output: 14

Explanation:

The 14 integers less than or equal to 30 whose digit sums are even are

2, 4, 6, 8, 11, 13, 15, 17, 19, 20, 22, 24, 26, and 28.

Constraints:

  • 1 <= num <= 1000

题目大意

给你一个正整数 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. 遍历从 1n 的所有数字。
  2. 对每个数字求数位之和。
  3. 如果数位之和是偶数,就把它计入结果。

复杂度分析

  • 时间复杂度O(n * d),其中 d 是数字的平均位数。
  • 空间复杂度O(1),仅使用了常量变量。

代码

暴力枚举
var countEven = function (n) {
	let count = 0;
	for (let i = 1; i <= n; i++) {
		let sum = 0;
		let num = i;
		while (num > 0) {
			sum += num % 10; // 提取每一位数字并加到 sum
			num = Math.floor(num / 10); // 去掉最低位
		}
		if (sum % 2 === 0) {
			// 判断数位和是否是偶数
			count++;
		}
	}
	return count;
};

相关题目

题号标题题解标签难度力扣
1945字符串转化后的各位数字之和[✓]字符串 模拟🟢🀄️open in new window 🔗open in new window
2240买钢笔和铅笔的方案数数学 枚举🟠🀄️open in new window 🔗open in new window
2310个位数字为 K 的整数之和贪心 数学 动态规划 1+🟠🀄️open in new window 🔗open in new window
2553分割数组中数字的数位数组 模拟🟢🀄️open in new window 🔗open in new window
3232判断是否可以赢得数字游戏数组 数学🟢🀄️open in new window 🔗open in new window