238. 除自身以外数组的乘积 - 力扣(LeetCode)
思路:
因为不可以使用除法,所以可以分两步进行。
第一步,算出当前位置之前(不包括当前数字)所有数字的乘积,记录到答案数组。
第二步,算出当前位置之后(不包括当前数字)所有数字的乘积,乘到答案数组中。
总结:
当前位置需要同时用到前缀和后缀,可以分两步进行。这里的前后缀可以是乘积、和、最值。
代码:
class Solution {
public int[] productExceptSelf(int[] nums) {
int n = nums.length;
int[] ans = new int[n];
int t = 1;
// 第一步:当前位置之前,不包括当前数字的所有数字的乘积
for(int i = 0; i < n; i++) {
// 记录到答案数组中
ans[i] = t;
t *= nums[i];
}
t = 1;
// 第二步:当前位置之后,不包括当前数字的所有数字的乘积
for(int i = n - 1; i >= 0; i--) {
// 乘到答案数组中
ans[i] *= t;
t *= nums[i];
}
return ans;
}
}
参考: