# lc238. Product of Array Except Self

Contents

Given an integer array `nums`, return an array `answer` such that `answer[i]` is equal to the product of all the elements of `nums` except `nums[i]`.

The product of any prefix or suffix of `nums` is guaranteed to fit in a 32-bit integer.

You must write an algorithm that runs in `O(n)` time and without using the division operation.

Example 1:

 ``````1 2 `````` ``````Input: nums = [1,2,3,4] Output: [24,12,8,6] ``````

Example 2:

 ``````1 2 `````` ``````Input: nums = [-1,1,0,-3,3] Output: [0,0,9,0,0] ``````

Constraints:

• `2 <= nums.length <= 105`
• `-30 <= nums[i] <= 30`
• The product of any prefix or suffix of `nums` is guaranteed to fit in a 32-bit integer.

Follow up: Can you solve the problem in `O(1) `extra space complexity? (The output array does not count as extra space for space complexity analysis.)

###### 解题思路:

 `````` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 `````` ``````class Solution(object): def productExceptSelf(self, nums): """ :type nums: List[int] :rtype: List[int] """ left=[] right=[] _mul=1 for i in range(len(nums)): left.append(_mul) _mul*=nums[i] _nums=nums[::-1] _mul=1 for i in range(len(_nums)): right.append(_mul) _mul*=_nums[i] right=right[::-1] return [left[i]*right[i] for i in range(len(left))] ``````

 `````` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 `````` ``````class Solution(object): def productExceptSelf(self, nums): """ :type nums: List[int] :rtype: List[int] """ res=[1 for i in range(len(nums))] _mul=1 for i in range(len(nums)): res[i]*=_mul _mul*=nums[i] _mul=1 for i in range(len(nums)): res[-i-1]*=_mul _mul*=nums[-i-1] return res ``````