方法一: 已知 B[i]=A[0]A[1]...A[i-1]*A[i+1]...*A[n-1],即B[n]是除了A[n]外A中其他 元素的累乘,所以只要两个for循环就可以解决

# -*- coding:utf-8 -*-
class Solution:
    def multiply(self, A):
        # write code here
        B = []
        length = len(A)
        for i in range(length):
            count = 1
            for j in range(length):
                if j == i:
                    continue
                count *= A[j]
            B.append(count)
        return B

方法二:
B[i]的值可以看作下图的矩阵中每行的乘积。
下三角用连乘可以很容求得,上三角,从下向上也是连乘。
因此我们的思路就很清晰了,先算下三角中的连乘,即我们先算出B[i]中的一部分,然后倒过来按上三角中的分布规律,把另一部分也乘进去。
借助一个大佬的图:图片说明

# -*- coding:utf-8 -*-
class Solution:
    def multiply(self, A):
        # write code here
        # 计算上三角形
        length = len(A)
        B=[None]*length
        B[0]=1
        for i in range(1,length):
            B[i] = B[i-1]*A[i-1]
        temp = 1
        n = length-2
        while n>=0:
            temp *= A[n+1]
            B[n] *= temp
            n-=1
        return B