# Approach 1: Calculate products from both sides

In a single for loop keep multiplying terms from left side and right side respectively and multiply those two to get the required product

`class Solution(object):    def productExceptSelf(self, nums):        """        https://leetcode.com/problems/product-of-array-except-self/description/        :type nums: List[int]        :rtype: List[int]        """        result =  * len(nums)        leftsum = 1        rightsum = 1        for i in range(len(nums)):            result[i] *= leftsum            result[len(nums)-i-1] *= rightsum            leftsum *= nums[i]            rightsum *= nums[len(nums)-i-1]        return result`

Time Complexity: O(N)

Space Complexity: O(1)

# Approach 2: Calculate products from both sides in 2 arrays

In a single loop build 2 arrays that contain the product of all the numbers to the left of a position, and all the numbers to the right of a position. Once those arrays are constructed, you can simply iterate through these index by index and multiply the left product at the previous index, and the right product at the next index to build the array of required products

`class Solution:    def productExceptSelf(self, nums: List[int]) -> List[int]:        le = len(nums)        dp_left, dp_right = *(le+1), *(le+1)        for i in range(le):            dp_left[i+1] *= dp_left[i] * nums[i]            dp_right[le - i - 1] = dp_right[le - i] * nums[-1 * i - 1]                ans = []        for i in range(le):            ans.append(dp_left[i]*dp_right[i+1])        return ans`

Time Complexity: O(N)

Space Complexity: O(N)

# Illegal Approach: Division

```def productExceptSelf(nums):    """    https://leetcode.com/problems/product-of-array-except-self/#/description
:type nums: List[int]    :rtype: List[int]    """
product=1    for num in nums:        if num==0:            product=0            break        product=product*num    if product==0:        return *len(nums)    return [int(product/x) for x in nums]```

Time Complexity: O(N)

Space Complexity: O(1)