#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param A int整型一维数组 
# @return int整型一维数组
#
class Solution:
    def multiply(self , A: List[int]) -> List[int]:
        # write code here
        n = len(A)
        '''l, r, B = [1]*n, [1]*n, [0]*n
        for i in range(1,n):
            l[i] = l[i-1]*A[i-1]
        for i in range(n-2,-1,-1):
            r[i] = r[i+1]*A[i+1]
        for i in range(n):
            B[i] = l[i]*r[i]
        return B'''
#法一:利用左右数组,分别计算左乘积数组、右乘积数组,然后再计算B[i]
        B = [1]*n
        for i in range(1,n):
            B[i] = B[i-1]*A[i-1]
        temp = 1
        for i in range(n-2,-1,-1):
            temp *= A[i+1]
            B[i] *= temp
        return B
#法二:节省空间复杂度,直接在数组上进行计算