解题思路:
先正向保存累乘结果,再反向保存累乘结果,再将对应的值乘起来能得到最终的结果,append到res中即可。
具体代码如下:
class Solution:
def productExceptSelf(self, nums: List[int]) -> List[int]:
forward = []
backward = []
tmp = 1
for num in nums:
forward.append(tmp)
tmp = tmp * num
tmp = 1
for num in nums[::-1]:
backward.append(tmp)
tmp = tmp * num
backward.reverse()
res = []
for i in range(len(nums)):
res.append(forward[i] * backward[i])
return res
进阶解法:
只能用空间复杂度为O(1)的解法。
有了以上的解法思路,进阶解法就同样不难得到,只需要直接设置一个res,想将前向的累乘的值push进去,然后再反向计算累乘值的时候从res的尾部开始乘就一样能得到对应的结果了。
具体代码如下:
class Solution:
def productExceptSelf(self, nums: List[int]) -> List[int]:
res = []
tmp = 1
for num in nums:
res.append(tmp)
tmp = tmp * num
tmp = 1
ptr = len(res) - 1
for num in nums[::-1]:
res[ptr] *= tmp
tmp = tmp * num
ptr -= 1
return res
这里不考虑res的空间,只用到了tmp和ptr两个int型的变量,时间复杂度依旧还是O(n),空间复杂度为O(1)。