思路
如果想要不用除法運算,計算i
位置上的結果時,需要i前面所有的乘積,和i
後面所有的乘積。分別用兩個陣列儲存,並計算順序以及逆序的乘積:
這樣只需要遍歷三遍就可以求得結果。
如果想要節省空間,可以把字首乘積和字尾乘積計算結果直接放到相應位置的output
上面。
第一遍儲存上字首乘積,其中i
位置放i
之前的乘積,即可以先放上output
再計算prefix *= nums[i]
:
第二遍計算字尾乘積,倒序計算,直接更新到output
上:
程式碼
class Solution:
def productExceptSelf(self, nums: List[int]) -> List[int]:
n = len(nums)
prefix, postfix = 1, 1
output = [1] * n
for i in range(n):
output[i] = prefix
prefix *= nums[i]
for j in range(n - 1, -1, -1):
output[j] *= postfix
postfix *= nums[j]
return output