Skip to content

Latest commit

 

History

History
140 lines (108 loc) · 4.48 KB

2180.md

File metadata and controls

140 lines (108 loc) · 4.48 KB
title description keywords
2180. 统计各位数字之和为偶数的整数个数
LeetCode 2180. 统计各位数字之和为偶数的整数个数题解,Count Integers With Even Digit Sum,包含解题思路、复杂度分析以及完整的 JavaScript 代码实现。
LeetCode
2180. 统计各位数字之和为偶数的整数个数
统计各位数字之和为偶数的整数个数
Count Integers With Even Digit Sum
解题思路
数学
模拟

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

🟢 Easy  🔖  数学 模拟  🔗 力扣 LeetCode

题目

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),仅使用了常量变量。

代码

::: code-tabs @tab 暴力枚举

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;
};

@tab 位运算

/**
 * @param {number} n
 * @return {number}
 */
var countEven = function (n) {
	return (n - (((n / 10) & 1) ^ ((n / 100) & 1) ^ (n / 1000))) >> 1;
};

:::

相关题目

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