题目:
Given an array of n integers where n > 1, nums
, return an array output
such that output[i]
is equal to the product of all the elements of nums
except nums[i]
.
Solve it without division and in O(n).
For example, given [1,2,3,4]
, return [24,12,8,6]
.
Follow up:
Could you solve it with constant space complexity? (Note: The output array does not count as extra space for the purpose of space complexity analysis.)
解题思路:
1.一开始想先把所有的数先乘起来,然后在计算第output【i】时,用之前算的积把output【i】除掉;但是这里有几个问题,一是,如果nums【i】是0的话,就会出现除零错误;2.就是如果若果nums【i】是0的话,那么所有数的乘积最后就是零,实际上,output【i】不会是零。
2.这里不准用除法,以及限定了空间复杂度。既然在计算output【i】时,其实有好多的结果是之前计算过的,这些结果忽略掉,就很浪费了。因此,在计算output【i】时,可以重用output【i】的结果。先用一次编历,计算第i个时先用前i-1个的积;然后再用一次遍历,从后面开始,计算从i+1到nums.size()的积;这两个积相乘,就是最终的结果。
代码如下:
class Solution:
def productExceptSelf(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
output = [1] * len(nums)
for i in range(1,len(nums)):
output[i] = output[i-1] * nums[i-1]
product = 1
for i in range(len(nums)-1, -1, -1):
output[i] *= product
product *= nums[i]
return output