LeetCode - 剑指 Offer 66. 构建乘积数组

原题地址

题目描述

在这里插入图片描述

解题思路

遍历乘法

先将其分为上下两个三角
在这里插入图片描述
在这里插入图片描述

下三角从上往下:从第二行开始,并且给B[0]赋初值1。累乘结果等于前一个的B[i-1]乘以a数组当前索引的前一个的元素a[i-1](这是因为相邻两行之间,下一行比上一行的左三角多了一个**a[i-1]**元素)。一个循环下来之后,每个B元素得到了a数组左下角各自的乘积。

上三角从下往上:从倒数第二行开始,并且给一个tmp变量赋初值1。每一次都将当前的tmp乘以a[i+1](这是因为相邻两行之间,上一行比下一行的右三角多了一个**a[i+1]**元素),并且把这个值乘到B[i]中去。

源代码

class Solution:
    def constructArr(self, a: List[int]) -> List[int]:
        B = [1]*len(a)
        tmp = 1
        for i in range(1, len(a)):
            B[i] = B[i-1]*a[i-1]
        for i in range(len(a)-2, -1, -1):
            tmp *= a[i+1]
            B[i] *= tmp
        return B         

运行结果

在这里插入图片描述

总结反思

这个题主要用到了数学思想,找出每一行之间的规律,第一次做这个类型的题,还得多刷几道,找到解题思路。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值