乍一看这个题很简单,但是不能用除法,并且在O(N)时间复杂度完成或许有点难度。
考虑到不能用除法,如果我们要计算输出结果位置i的值,我们就要获取这个位置左边的乘积和右边的乘积,那么我新设立两个数组L和R。
对于L来说,由于表达的是位置i左边的数的乘积,那么L[0]=1,因为第一个数字左边没数那么为了不影响乘积初始值就设置为1,那么L[1]=L[0]*nums[0],那么L[i]=L[i-1]*nums[i-1]因为去掉位置i的乘积 就等于上个位置i-1去掉位置的乘积*其本身。
对于R来说,同理,只不过是逆序,注意界定循环的范围。
class Solution:
def productExceptSelf(self, nums: List[int]) -> List[int]:
length=len(nums)
L,R,result=[0]*length,[0]*length,[0]*length
L[0]=1
for i in range(1,length):
L[i]=L[i-1]*nums[i-1]
R[length-1]=1
for i in reversed(range(length-1)):
R[i]=R[i+1]*nums[i+1]
for i in range(length):
result[i]=L[i]*R[i]
return result