这题还是有点绕的,一开始很简单的相求出所有数字的乘积,在去根据0的数量算出结果,虽然违背了题目本意,但是勉强也算是一种方法吧。先放上只有答案符合的代码:
class Solution(object):
"""docstring for Solution"""
def productExceptSelf(self, nums):
alls = 1
all0 = 1
zero = 0
s = 0
for num in nums:
if num == 0:
zero += 1
else:
alls *= num
outputs = []
for num in nums:
if zero == 1:
if num == 0:
outputs.append(alls)
else:
outputs.append(s)
elif zero == 2:
outputs.append(s)
elif zero == 0:
outputs.append(alls/num)
return outputs
这段按照网站上提示的错误是有点奇怪的。可能是对除法的一种反制吧。
好了,下面放正确的代码:
#238
#https://leetcode.com/problems/product-of-array-except-self/description/
#2018.4.29
class Solution(object):
"""docstring for Solution"""
def productExceptSelf(self, nums):
length = len(nums)
p = 1
outputs = []
for num in nums:
outputs.append(p)
p *= num
p = 1
for i in range(length-1,-1,-1):
outputs[i] *= p
p *= nums[i]
return outputs
其实只要正反乘两次就可以了。