题目描述:给定一个数组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]
。不能使用除法。
思路:不使用辅助空间,直接建立B数组,先对A从前向后取值,B中对应位的计算方法为B[i]=B[i-1]*A[i]
。再对A从后向前取值,B中对应位计算方法为B[i]=B[i]*tmp
,tmp记录从后向前的乘值,两次循环时间复杂度为o(n)。
# -*- coding:utf-8 -*-
class Solution:
def multiply(self, A):
if(len(A) <= 0):
return None
B = [1]*len(A)
for i in range(1,len(A)):
B[i] = B[i-1]*A[i-1]
tmp = 1
for j in range(len(A)-1,0,-1):
tmp = tmp * A[j]
B[j-1] *= tmp
return B