Leetcode区间奇数统计代码:为何结果自动向下取整?
解答:LeetCode统计区间奇数代码中的取整机制
这是LeetCode里一道统计区间内奇数数量的题目:给定两个非负整数low和high,返回[low, high](包含两端)内的奇数个数。给出的高效实现代码如下:
class Solution(object): def countOdds(self, low, high): high = high + 1 c = high/2 - low/2 return c
问题核心:Python整数除法的行为
你疑惑的点在于输入low=8、high=10时,数学计算得1.5但代码返回1,这是Python整数除法的特性导致的:
- 若运行环境是Python 2,运算符
/对两个整数执行的是地板除法(向下取整)——直接舍弃小数部分,只保留整数商。比如:high + 1 = 11,11/2的结果是5(而非5.5)8/2的结果是4- 最终
5-4=1,返回整数1。
- 若是在Python 3环境中,
/会返回浮点数,此时计算结果会是1.5,但LeetCode题目要求返回整数,这种情况代码会不符合要求。所以你看到的代码能正确返回结果,说明它是运行在Python 2环境下,或者实际代码中用的是Python 3的地板除运算符//(效果和Python 2的/完全一致)。
补充:公式的逻辑本质
这个代码的思路其实是统计[0, high+1)范围内的奇数个数,减去[0, low)范围内的奇数个数,差值就是[low, high]内的奇数总数。而整数地板除刚好完美匹配这个统计逻辑——每两个连续数里有一个奇数,整数除法直接得到完整的奇数数量,不需要额外取整操作。
内容的提问来源于stack exchange,提问作者Astro
相关产品推荐
相关产品推荐

