给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。
ps:
题目数据保证数组之中任意元素的全部前缀元素和后缀(甚至是整个数组)的乘积都在 32 位整数范围内。
说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。
进阶:
你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组不被视为额外空间。)
获得当前数组的左右乘积,来将其相乘即可得到答案:
class Solution:
def productExceptSelf(self, nums: List[int]) -> List[int]:
n = len(nums)
output = [0 for x in range(n)]
# 为了使额外内存为1
# 先存左边乘积
# 第一个位置左边没有数,为了方便设为1
output[0] = 1
# 第二个位置z为数组中第一位
output[1] = nums[0]
for i in range(2, n):
output[i] = output[i - 1] * nums[i - 1]
# 用一个变量来存放右边乘积,从右边第一个不为0的开始
right = nums[n - 1]
for i in range(n - 2, -1, -1):
output[i] = output[i] * right
right = nums[i] * right
return output