给你一个整数数组nums,返回数组answer,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。题目数据保证数组 nums之中任意元素的全部前缀元素和后缀的乘积都在32位整数范围内。请不要使用除法,且在 O(n) 时间复杂度内完成此题。
思路:
- 1.分别计算左边和右边的乘积,相乘就是除了自身以外数组的乘积;
- 2.左边可以随着遍历顺序计算乘积,右边使用需要返回的数组保存所需乘积信息。
class Solution(object):
def productExceptSelf(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
length = len(nums)
num = [1] * length
left = 1
#使用返回的数组存储,不算空间复杂度
for i in range(length-2,-1,-1):
num[i] = num[i+1] * nums[i+1]
#左边部分累乘+确定
for i in range(length):
num[i] = left * num[i]
left = left * nums[i]
return num