【Swift】LeetCode 238.除自身以外数组的乘积
238. 除自身以外数组的乘积

题目描述

思路 and Swift 题解
之前在解这道题的过程中,我一直建立两个数组,分别存储当前遍历位置的前缀积和后缀积,但其实这道题目不需要这么复杂,只需要经过正向和反向的两次遍历,使用一个变量来存储前缀积和后缀积,即可解决这道题目。
首先我们需要先建立一个存储答案的数组ans,它的长度等于输入nums的长度,所有元素初始化为1。
之后,我们首先进行正向遍历,建立一个初始值为1的变量left来存储前缀积。每次遍历令ans[i] *= left; left *= nums[i],在left更新之前,它存储的值显然就是0 -> i - 1这个区间上的积。
再然后,我们进行反向遍历,建立一个初始值为1的right,令ans[i] *= right; right *= nums[i]。
遍历完成后,返回答案即可。
完整的 Swift 题解:
class Solution {func productExceptSelf(_ nums: [Int]) -> [Int] {var ans = Array(repeating: 1, count: nums.count)var left = 1var right = 1for i in 0..<nums.count {ans[i] *= leftleft *= nums[i]}for i in (0..<nums.count).reversed() {ans[i] *= rightright *= nums[i]}return ans}
}
