# 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)

# 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)