2 种写法。 python 和 C语言
1. python
class Solution:
def productExceptSelf(self, nums: List[int]) -> List[int]:
# nums = [1, 2, 3]
# L = [1, ]
n = len(nums)
# L, R ,分别代码左右的 乘积列表
L, R, ret = [0] * n, [0] * n, [0] * n
L[0] = 1
for i in range(1, n):
# 这里的 nums[i-1],i - 1 的目的是为了取到 nums 的第一个值。
# 因为 i 是从1 开始的。
L[i] = nums[i - 1] * L[i-1] # ???
# 处理右侧。需要反转一下。
R[n - 1] = 1
for i in reversed(range(n-1)):
R[i] = nums[i+1] * R[i+1]
# 处理索引 i
for i in range(n):
ret[i] = L[i] * R[i]
return ret
2. C语言
/**
参考代码:
https://leetcode.cn/problems/product-of-array-except-self/solutions/2254723/238-chu-zi-shen-yi-wai-shu-zu-de-cheng-j-xfqm/?envType=study-plan-v2&envId=selected-coding-interview
*/
int ret[100000];
int* productExceptSelf(int* nums, int numsSize, int* returnSize) {
// int ret[100000] = {1}; // 这个写法不行。只有第一个值是1, 其他的都是0
for (int i =0; i < numsSize; i++) {
ret[i] = 1;
}
int pre = 1, suf = 1;
for (int i=1; i < numsSize; i++) {
pre *= nums[i-1]; // 从前面取值。
suf *= nums[numsSize -i]; // 相当于是, 从数组的末尾开始取值。
ret[i] *= pre;
// 这里比较难理解。
ret[numsSize -i - 1] *= suf;
}
*returnSize = numsSize;
return ret;
}
参考链接中的这个写法,下面有很多评论,别人也有很多疑问:
C语言,细节上的问题太多了。
下面记录一些知识点:
- 初始化数组:
int ret[100000] = {1}; // 这个写法不行。只有第一个值是1, 其他的都是0.
- 把一个指针数组传入函数, 还需要传入数组的大小,这个也太麻烦了。