题目描述
给定一个数组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]。不能使用除法。
# -*- coding:utf-8 -*-
class Solution:
def multiply(self, A):
# write code here
muls=[]
b=[]
tmp=1
for i in range(len(A)):
muls.append(tmp)
tmp=tmp*A[i]
tmp=1
for j in range(len(A)):
b.append(muls[len(A)-1-j]*tmp)
tmp=tmp*A[len(A)-1-j]
return b[::-1]
为了获得O(n)的时间复杂度,使用了O(n)的空间复杂度。以len(A)=5为例,A[0,1,2,3,4]。muls中存的是如下的值
[1,A[0],A[0]*A[1],A[0]*A[1]*A[2],A[0]*A[1]*A[2]*A[3]]
然后计算结果,从B[4]开始计算。可以看到B[4]就是muls[4],B[3]=muls[3]*A[4],B[2]=muls[2]*A[4]*A[3]