leetcode 238. 除自身以外数组的乘积。该题要求不能使用除法,这类题基本就是找规律的问题,他可能没有固定套路或解法,是需要我们积累的。
下面是解题关键,不乘本身相当于将本身的数换成了1:
res | |||||
---|---|---|---|---|---|
res[0] | 1 | nums[1] | … | nums[n-2] | nums[n-1] |
res[1] | nums[0] | 1 | … | nums[n-2] | nums[n-1] |
… | |||||
res[n-2] | nums[0] | nums[1] | … | 1 | nums[n-1] |
res[n-1] | nums[1] | nums[2] | … | nums[n-2] | 1 |
从该表可以看出,斜对角线上的1将整个矩阵分成了上下三角,我们分别计算上下三角即可求出最终结果。
def productExceptSelf(nums):
res = [1]
p, q = 1, 1 #分别去辅助计算上下三角
for i in range(len(nums)-1): #计算下三角
p = p*nums[i]
res.append(p)
for j in range(len(nums)-1, 0, -1): #计算上三角并累乘
q = q*nums[j]
res[j-1] *= q
return res