方法一: 已知 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