【题目描述】
这道题主要是题干有要求,一是不允许使用除法,这就打消了我先求出数组累乘之积,再除以各个nums[i]的念头。二是要求时间复杂度是线性的,因此不可以双层循环嵌套。
因此考虑左数组和右数组,左数组保存的是nums[i]之前的所有元素之积,右数组保存的是nums[i]之后的所有元素之积,这样一来,求output[i]就可以直接用相应位置的左右数组相乘即可了。这个方法的时间复杂度是线性的,空间复杂度为O(1),只需要一个保存num变量的存储空间即可。
这里说一下,实现对应位置左右数组相乘的方式,用到了python 中的map函数和zip函数。
left=[1,2]
right=[3,4]
output=list(map(lambda x:x[0]*x[1],list(zip(left,right ))))
复制代码
【源代码】
class Solution(object):
def productExceptSelf(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
left=[]
right=[]
num=1
for i in range(len(nums)):
left.append(num)
num*=nums[i]
num=1
for i in reversed(range(len(nums))):
right.append(num)
num*=nums[i]
return map(lambda (x,y):x*y,zip(left,reversed(right) ))
复制代码