《华为机试》刷题之HJ70 矩阵乘法计算量估算

一、题目

在这里插入图片描述

二、示例

在这里插入图片描述

三、代码

while True:
    try:
        n = int(input())
        temp = []
        stack = []
        result = 0
        for i in range(n):
            temp.append(list(map(int, input().split())))
        for i in input():
            if i.isalpha():
                stack.append(temp[ord(i) - 65])
            elif i == ')' and len(stack) >= 2:
                right = stack.pop()
                left = stack.pop()
                result += left[0] * left[1] * right[1]
                stack.append([left[0], right[1]])
        print(result)
    except:
        break

四、算法说明

矩阵相乘的顺序由括号规定,首先借助ASCII码,将字母规定的顺序转换成第几个矩阵temp[ord(i) - 65],遍历输入的所有矩阵temp,读到一个新的矩阵时(标记为A-Z),将其放入栈stack中;

当读到右括号的时候,说明当前栈顶的两个矩阵需要进行运算,我们此时统计,并累加本次运算的次数result += left[0] * left[1] * right[1],然后将计算后的新矩阵重新入栈stack.append([left[0], right[1]]),直到所有的右括号都被读完,返回最终结果。

胡萝卜

2022年3月3日15:11:34

我不知道将去向何方,但我已在路上!
时光匆匆,虽未曾谋面,却相遇于斯,实在是莫大的缘分,感谢您的到访 !
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

O_胡萝卜_O

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值