给你两个非负整数 low
和 high
。请你返回 low
和 high
之间(包括二者)奇数的数目。
示例 1:
输入:low = 3, high = 7 输出:3 解释:3 到 7 之间奇数数字为 [3,5,7] 。
示例 2:
输入:low = 8, high = 10 输出:1 解释:8 到 10 之间奇数数字为 [9] 。
class Solution:
def countOdds(self, low: int, high: int) -> int:
def count_odds_up_to(n: int) -> int:
return (n + 1) // 2
return count_odds_up_to(high) - count_odds_up_to(low - 1)
数学方法解释
计算从 1 到某个数
n
的奇数个数:
- 从
1
到n
的奇数个数可以通过(n + 1) // 2
来计算。
- 这是因为每两个连续的整数中有一个是奇数。例如,从
1
到4
的奇数是1
,3
,总共两个奇数。公式(4 + 1) // 2
结果为2
,正好是奇数的个数。计算从
low
到high
之间的奇数个数:
- 先计算从
1
到high
的奇数个数,记作count_odds_up_to(high)
。- 再计算从
1
到low - 1
的奇数个数,记作count_odds_up_to(low - 1)
。- 这两者的差值即为从
low
到high
之间的奇数个数。具体步骤
计算从 1 到
high
的奇数个数:
- 使用公式
(high + 1) // 2
。计算从 1 到
low - 1
的奇数个数:
- 使用公式
(low - 1 + 1) // 2
,即(low) // 2
。计算从
low
到high
的奇数个数:
- 使用公式:
count_odds_up_to(high) - count_odds_up_to(low - 1)
。示例
假设
low = 8
和high = 10
:
- 从 1 到 10 的奇数个数:
(10 + 1) // 2 = 11 // 2 = 5
(奇数是1, 3, 5, 7, 9
)。- 从 1 到 7 的奇数个数:
(7 + 1) // 2 = 8 // 2 = 4
(奇数是1, 3, 5, 7
)。计算
low
到high
的奇数个数:
count_odds_up_to(10) - count_odds_up_to(7) = 5 - 4 = 1
(奇数是9
)。