Question
Given an array nums
of n integers where n > 1
, return an array output
such that output[i]
is equal to the product of all the elements of nums
except nums[i]
.
Example:
Input: [1,2,3,4]
Output: [24,12,8,6]
Note: Please solve it without division and in O(n).
Follow up:
Could you solve it with constant space complexity? (The output array does not count as extra space for the purpose of space complexity analysis.)
Solution
We can do this in two parts. The first part is to get the multiplication for all numbers left to position i
. This can be done left to right by multiplying the value at position i-1
with nums[i-1]
. The second part is to get the multiplication for all numbers right to position i
. This can be done right to left.
class Solution(object):
def productExceptSelf(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
res = list()
res.append(1)
for i in range(1, len(nums)):
res.append(res[-1] * nums[i - 1])
right = 1
for i in range(len(nums) - 1, -1, -1):
res[i] *= right
right *= nums[i]
return res