Leetcode 238. 除自身以外数组的乘积

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语言,细节上的问题太多了。
下面记录一些知识点:

  1. 初始化数组:

    int ret[100000] = {1}; // 这个写法不行。只有第一个值是1, 其他的都是0.

  2. 把一个指针数组传入函数, 还需要传入数组的大小,这个也太麻烦了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

waterHBO

老哥,支持一下啊

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值