题目描述
给定一个数组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]。
注:不能使用除法;只能使用一个数组
样例
输入:[1, 2, 3, 4, 5]
输出:[120, 60, 40, 30, 24]
算法1
把B[i]分成两部分的乘积:B[i]=(A[0]A[1]…A[i-1]) * (A[i+1]…*A[n-1])
从前往后遍历连乘求i之前的数字,用p保存;从后往前遍历连乘求i之后的数字,在乘前边的数字
时间复杂度
遍历一遍数组,时间复杂度为 $O(n)$
python 代码
class Solution(object):
def multiply(self, A):
"""
:type A: List[int] A = [1, 2, 3, 4, 5]
:rtype: List[int] B = [120, 60, 40 30, 24]
"""
n = len(A)
if not A or n == 0: return []
B = [None] * n
p = 1
for i in range(n):
B[i] = p
p *= A[i]
# B[i] = [1, 1, 2, 6, 24] #下标i之前所有数字乘积
p = 1
for i in range(n-1, -1, -1):
B[i] *= p
p *=A[i]
return B