238_除自身以外数组的乘积
2023/8/3小于 1 分钟
238_除自身以外数组的乘积
中等原数组: [1 2 3 4]
左部分的乘积: 1 1 12 123
右部分的乘积: 234 34 4 1
结果: 1234 134 124 1231
建立两个左右数组,通过两次for遍历得出结果
Java
class Solution {
public int[] productExceptSelf(int[] nums) {
int len = nums.length;
// 左右数组
int[] left = new int[len];
int[] right = new int[len];
int[] res = new int[len];
left[0] = 1;
right[len - 1] = 1;
// 计算左右数组对应的值
for (int i = 1 ; i < len; i++) {
left[i] = left[i - 1] * nums[i - 1];
right[len -1 - i] = right[len - i] * nums[len - i];
}
// 相乘为结果
for (int i = 0; i < len; i++) {
res[i] = left[i] * right[i];
}
return res;
}
}Python
class Solution:
def productExceptSelf(self, nums: List[int]) -> List[int]:
ans, tmp = [1] * len(nums), 1
for i in range(1, len(nums)):
ans[i] = ans[i - 1] * nums[i - 1]
for i in range(len(nums) - 2, -1, -1):
tmp *= nums[i + 1]
ans[i] *= tmp
return ans