解题思路:
当前位置的结果就是它左部分的乘积再乘以它右部分的乘积。因此需要进行两次遍历,第一次遍历用于求左部分的乘积,第二次遍历在求右部分的乘积的同时,再将最后的计算结果一起求出来。
class Solution {
public int[] productExceptSelf(int[] nums) {
int len = nums.length;
if (len == 0)
return new int[0];
int[] ans = new int[len];
ans[0] = 1;
int tmp = 1;
//左半部分乘积
for (int i = 1; i < len; i++) {
ans[i] = ans[i - 1] * nums[i - 1];
}
//右半部分乘积,巧妙地使用tmp
for (int i = len - 2; i >= 0; i--) {
tmp *= nums[i + 1];
ans[i] *= tmp;
}
return ans;
}
}