238. 除了自身以外数组的乘积

题目描述
思路
我们可以通过建立两个数组,以O(n)O(n)O(n)的时间复杂度来解决这个问题。
具体来说,题目中要求我们求出当前数组当中除了自身以外的乘积,我们可以建立两个数组lmul和rmul,分别用于统计除了自身之外左侧数组的乘积与右侧数组的乘积(前缀积与后缀积)。
最后在统计答案时,将两部分乘积进行相乘,即可得到最终的结果。
Golang 题解
go
func productExceptSelf(nums []int) []int {
n := len(nums)
lmul, rmul := make([]int, n), make([]int, n)
lmul[0], rmul[n - 1] = 1, 1
for i := 1; i < n; i ++ {
lmul[i] = lmul[i - 1] * nums[i - 1]
}
for i := n - 2; i >= 0; i -- {
rmul[i] = rmul[i + 1] * nums[i + 1]
}
ans := make([]int, n)
for i := 0; i < n; i ++ {
ans[i] = lmul[i] * rmul[i]
}
return ans
}
Python 题解
python
class Solution:
def productExceptSelf(self, nums: List[int]) -> List[int]:
n = len(nums)
lmul, rmul = [1] * n, [1] * n
for i in range(1, n):
lmul[i] = lmul[i - 1] * nums[i - 1]
for i in range(n - 2, -1, -1):
rmul[i] = rmul[i + 1] * nums[i + 1]
ans = [1] * n
for i in range(0, n):
ans[i] = lmul[i] * rmul[i]
return ans