力扣第238题 除自身以外数组的乘积
思路
分为三种情况讨论。
第一种:nums里有两个以上的数字为0,那么,想都不用想,直接输出全是0的等长数组。因为不管当前的数字是几,其他数字的积总是等于0的。
第二种:就存在数字0小于2个的,那只要当前选中的数字不是0,那其他数字之积就是0,当前选中的是0的时候,那就是其他非0的数字之积了。
第三种:就没有什么好说的了,没有0,直接用积除以当前数字就好了
代码
```python3
class Solution:
def productExceptSelf(self, nums: List[int]) -> List[int]:
zero = 0
ji = 1
for i in nums:
if i != 0:
ji *= i # 记录非0的数字积
else:
zero += 1 # 记录数字0出现的次数
if zero >= 2:
return [0 for i in range(len(nums))] # 处理0次数大于2的情况
out = []
# 下面就是出现2次一下的情况了
for i in nums:
if i == 0:
out.append(ji)
elif zero > 0:
out.append(0)
else:
out.append(ji//i)
return out

浙公网安备 33010602011771号