本题给定一个数组,要求我们返回一个同等大小的数组,其中每个output[i]的值是除了nums中i位置的其他数字的乘积。
第一想法是除法,但是不可以用啦
第二想法是两次循环,当然时间复杂度也是太高
继续思索可以发现每个位置其实都是它前面所有数的乘积再乘上它后面所有数的乘积。按照这种想法建立返回数组,首先该数组中从第二个数开始每个数都是前面数的乘积,这样完成了第一步,其实此时数组中的最后一个数已经是返回值了。接下来从返回数组的倒数第二个数开始向前,每个返回值都是该数字(也就是nums中该数以前数的乘积)与nums该数字以后数字乘积的乘积。
class Solution(object):
def productExceptSelf(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
re = list()
re.append(1)
temp = 1
for i in range(0,len(nums)-1):
temp = temp * nums[i]
re.append(temp)
temp = 1
for i in range(len(nums)-2,-1,-1):
temp = temp * nums[i+1]
re[i] = re[i] * temp
return re