LeetCode除自身以外数组的乘积问题:Python代码中第二个for循环未执行的问题求助
问题排查与修复
嘿,我一眼就看到问题出在哪儿了——你的第二个for循环的range参数写错啦!
为什么第二个循环没执行?
Python里range(a, b)的默认步长是正1,当起始值a大于结束值b时,这个区间是空的,循环自然不会触发。你写的range(n-1, -1),这里n=4,也就是range(3, -1),起始值3比结束值-1大,步长又是正的,根本不会进入循环体。
要实现从后往前遍历数组,你需要给range加上第三个参数:步长-1,也就是写成range(n-1, -1, -1),这样才会从索引3开始,依次走到2、1、0,最后停在-1(不包含该值)。
修正后的完整代码
nums = [0,5,4,12] n = len(nums) temp = 1 ans = [] # 计算前缀乘积:ans[i] 存储 nums[0..i-1] 的乘积 for i in range(n): ans.append(temp) temp *= nums[i] temp = 1 # 从后往前遍历,乘上后缀乘积:nums[i+1..n-1] 的乘积 for i in range(n-1, -1, -1): ans[i] *= temp temp *= nums[i] print("yes") print(ans) # 输出结果:[240, 0, 0, 0]
逻辑验证
- 第一个循环结束后,
ans为[1, 0, 0, 0],对应每个位置的前缀乘积 - 第二个循环从后往前遍历:
- i=3: ans[3] = 0 * 1 = 0,temp更新为
1*12=12 - i=2: ans[2] = 0 *12=0,temp更新为
12*4=48 - i=1: ans[1] =0 *48=0,temp更新为
48*5=240 - i=0: ans[0] =1 *240=240,temp更新为
240*0=0
- i=3: ans[3] = 0 * 1 = 0,temp更新为
- 最终结果完全符合题目要求:每个位置的值都是除自身外所有元素的乘积
内容的提问来源于stack exchange,提问作者Hari
相关产品推荐
相关产品推荐

