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

京公网安备 11010502036488号