题目描述:
给定一个数组 A[0,1,…,n-1] ,请构建一个数组 B[0,1,…,n-1] ,其中 B 的元素 B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1](除 A[i] 以外的全部元素的的乘积)。程序中不能使用除法。(注意:规定 B[0] = A[1] * A[2] * … * A[n-1],B[n-1] = A[0] * A[1] * … * A[n-2])
对于 A 长度为 1 的情况,B 无意义,故而无法构建,用例中不包括这种情况。
示例1
输入:[1,2,3,4,5]
返回值:[120,60,40,30,24]
思路:
以i为分隔,B[i]=B[左边]*B[右边]
python代码实现:
class Solution:
def multiply(self, A):
B, right = [1]*len(A), 1 #先定义B数组长度和右边初始值=1
#看左边的乘积
for i in range(1, len(A)): #索引起始位是从1开始的
B[i] = B[i -1] * A [i -1]
#再看右边
for i in range((len(A) -2), -1, -1): #range(start, end, step)这里表示i 从最大索引开始,每次取值减1.
right *= A[i+1] # 右边的乘积
B[i] *= right # 更新B[i] = B[左边] * B[右边]
return B