题干
给你一个整数数组 nums
,返回 数组 answer
,其中 answer[i]
等于 nums
中除 nums[i]
之外其余各元素的乘积 。
题目数据 保证 数组 nums
之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。
请 不要使用除法,且在 O(n)
时间复杂度内完成此题。
思路
1.让数组A每一项都对应nums左侧所有元素的乘积
2.让数组B每一项都对应nums右侧所有元素的乘积
3.把数字A和数组B相同下标的元素相乘,得到的新数组就是answer,(左侧所有元素*右侧所有元=除nums[i])
解法
func productExceptSelf(nums []int) []int {
length := len(nums)
answer := make([]int, length)
// 初始化 answer 数组,存储左侧乘积
// answer[i] 存储的是 nums[0] 到 nums[i-1] 的乘积
answer[0] = 1
for i := 1; i < length; i++ {
//answer代表目标位置左侧所有元素的乘积
//每次遍历nums指针向左移遍历左侧元素,answer指针右移填充返回的答案数组
//每个answer都不包含当前nums[i]的元素
//每次结果为上一个nums的值乘以上一个answer
answer[i] = nums[i