comments | difficulty | edit_url | rating | source | tags | ||
---|---|---|---|---|---|---|---|
true |
简单 |
1257 |
第 281 场周赛 Q1 |
|
给你一个正整数 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
一种最简单直接的方法是枚举
时间复杂度
class Solution:
def countEven(self, num: int) -> int:
ans = 0
for x in range(1, num + 1):
s = 0
while x:
s += x % 10
x //= 10
ans += s % 2 == 0
return ans
class Solution {
public int countEven(int num) {
int ans = 0;
for (int i = 1; i <= num; ++i) {
int s = 0;
for (int x = i; x > 0; x /= 10) {
s += x % 10;
}
if (s % 2 == 0) {
++ans;
}
}
return ans;
}
}
class Solution {
public:
int countEven(int num) {
int ans = 0;
for (int i = 1; i <= num; ++i) {
int s = 0;
for (int x = i; x; x /= 10) {
s += x % 10;
}
ans += s % 2 == 0;
}
return ans;
}
};
func countEven(num int) (ans int) {
for i := 1; i <= num; i++ {
s := 0
for x := i; x > 0; x /= 10 {
s += x % 10
}
if s%2 == 0 {
ans++
}
}
return
}
function countEven(num: number): number {
let ans = 0;
for (let i = 1; i <= num; ++i) {
let s = 0;
for (let x = i; x; x = Math.floor(x / 10)) {
s += x % 10;
}
if (s % 2 == 0) {
++ans;
}
}
return ans;
}
我们观察发现,在
因此,我们可以先算出
接下来,我们还需要考虑剩下的
我们不妨举个例子,假设
剩下的数字分别是
时间复杂度
class Solution:
def countEven(self, num: int) -> int:
ans = num // 10 * 5 - 1
x, s = num // 10, 0
while x:
s += x % 10
x //= 10
ans += (num % 10 + 2 - (s & 1)) >> 1
return ans
class Solution {
public int countEven(int num) {
int ans = num / 10 * 5 - 1;
int s = 0;
for (int x = num / 10; x > 0; x /= 10) {
s += x % 10;
}
ans += (num % 10 + 2 - (s & 1)) >> 1;
return ans;
}
}
class Solution {
public:
int countEven(int num) {
int ans = num / 10 * 5 - 1;
int s = 0;
for (int x = num / 10; x > 0; x /= 10) {
s += x % 10;
}
ans += (num % 10 + 2 - (s & 1)) >> 1;
return ans;
}
};
func countEven(num int) (ans int) {
ans = num/10*5 - 1
s := 0
for x := num / 10; x > 0; x /= 10 {
s += x % 10
}
ans += (num%10 + 2 - (s & 1)) >> 1
return
}
function countEven(num: number): number {
let ans = Math.floor(num / 10) * 5 - 1;
let s = 0;
for (let x = Math.floor(num / 10); x; x = Math.floor(x / 10)) {
s += x % 10;
}
ans += ((num % 10) + 2 - (s & 1)) >> 1;
return ans;
}