动态规划
有点脑筋急转弯的味道了
要求[....3....]中除了3以外其他数的乘积,我们需要知道3左边所有数的乘积,以及3右边所有数的乘积,两者相乘即可。
我们可以使用两个数组
L[i]表示nums[i]左边的数的乘积,也就是nums[0]乘到nums[i - 1]R[i]表示nums[i]右边的数的乘积,也就是nums[n - 1]乘到nums[i + 1]
public int[] productExceptSelf(int[] nums) {
int n = nums.length;
int[] L = new int[n];
int[] R = new int[n];
int[] answer = new int[n];
L[0] = 1;
for (int i = 1; i < n; i++) {
L[i] = L[i - 1] * nums[i - 1];
}
R[n - 1] = 1;
for (int i = n - 2; i >= 0; i--) {
R[i] = R[i + 1] * nums[i + 1];
}
for (int i = 0; i < n; i++) {
answer[i] = L[i] * R[i];
}
return answer;
}