除自身以外数组的乘积

47 阅读1分钟

给你一个整数数组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