python3 两种方法

构建乘积数组

http://www.nowcoder.com/questionTerminal/94a4d381a68b47b7a8bed86f2975db46

方法一: 已知 B[i]=A[0]A[1]...A[i-1]*A[i+1]...*A[n-1],即B[n]是除了A[n]外A中其他 元素的累乘,所以只要两个for循环就可以解决

# -*- coding:utf-8 -*-
class Solution:
    def multiply(self, A):
        # write code here
        B = []
        length = len(A)
        for i in range(length):
            count = 1
            for j in range(length):
                if j == i:
                    continue
                count *= A[j]
            B.append(count)
        return B

方法二:
B[i]的值可以看作下图的矩阵中每行的乘积。
下三角用连乘可以很容求得,上三角,从下向上也是连乘。
因此我们的思路就很清晰了,先算下三角中的连乘,即我们先算出B[i]中的一部分,然后倒过来按上三角中的分布规律,把另一部分也乘进去。
借助一个大佬的图:图片说明

# -*- coding:utf-8 -*-
class Solution:
    def multiply(self, A):
        # write code here
        # 计算上三角形
        length = len(A)
        B=[None]*length
        B[0]=1
        for i in range(1,length):
            B[i] = B[i-1]*A[i-1]
        temp = 1
        n = length-2
        while n>=0:
            temp *= A[n+1]
            B[n] *= temp
            n-=1
        return B

全部评论

相关推荐

11-24 00:11
已编辑
广东工业大学 算法工程师
避雷深圳  yidao,试用期 6 个月。好嘛,试用期还没结束,就直接告诉你尽快找下一家吧,我谢谢您嘞
牛客75408465号:笑死,直属领导和 hr 口径都没统一,各自说了一些离谱的被裁理由,你们能不能认真一点呀,哈哈哈哈哈😅😅😅
点赞 评论 收藏
分享
10-25 12:05
已编辑
湖南科技大学 Java
若梦难了:我有你这简历,已经大厂乱杀了
点赞 评论 收藏
分享
头像
11-18 16:08
福州大学 Java
影流之主:干10年不被裁,我就能拿别人一年的钱了,日子有盼头了
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务