题目:
给定一个包含n个数字的数组nums,n>1,返回一个数组output,其中output[i]的内容为除了nums[i]以外的nums中其他所有元素的乘积,要求不使用除号,且时间复杂度为O(n)。
解题思路:
由于不能使用除号,所以必须只有乘号来计算。维护两个数组dp1和dp2,分别用来保存第i个位置之前所有数的乘积和第i个位置之后所有数的乘积。
代码(Python):
class Solution(object):
def productExceptSelf(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
dp1 = [1]
dp2 = [1]
for i in range(len(nums)-1):
dp1.append(dp1[i]*nums[i])
dp2.append(dp2[i]*nums[-i-1])
output = []
for i in range(len(dp1)):
output.append(dp1[i]*dp2[-i-1])
return output