除自身以外数组的乘积
给定长度为 n 的整数数组 nums
,其中 n > 1,返回输出数组 output
,其中 output[i]
等于 nums
中除 nums[i]
之外其余各元素的乘积。
示例:
输入:[1,2,3,4]
输出:[24,12,8,6]
说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。
class Solution:
def productExceptSelf(self, nums: List[int]) -> List[int]:
ins = []
ret = []
mul1 = 1
mul2 = 1
for i in range(len(nums)):
mul1 *= nums[i]
ins.append(mul1)
mul2 *= nums[len(nums)-1-i]
ret.append(mul2)
ret.reverse()
ret[0] = ret[1]
for i in range(1,len(nums)-1):
ret[i] = ins[i-1]*ret[i+1]
ret[len(nums)-1] = ins[-2]
return ret
问题&思路:
- 先拿个例子找找思路,比如[1,2,3,4],正序乘积为[1,1*2,1*2*3,1*2*3*4] = [1,2,6,24] ,逆序乘积为[4*3*2*1,4*3*2,4*3,4]=[24,24,12,4],
[24,12,8,6]=[2*3*4,1*3*4,1*2*4,1*2*3],就可以找到规律了,位置1=逆序位置2,位置2=正序位置1*逆序位置3,位置3=正序位置2*逆序位置4,位置4=正序位置3(正序位置倒数第二个)