题解 | #矩阵乘法计算量估算#
矩阵乘法计算量估算
https://www.nowcoder.com/practice/15e41630514445719a942e004edc0a5b
# 这个题的核心思路为:
# 我们从左到右去遍历一个带左右括号和字母的字符串,每当我们从左到右遇到一次右括号,
# 注意,从左到右遇到的第一个右括号,一定是需要“开心消消乐”的最中间的一组,即开始消除的地方,非常巧妙
# 我们遇到第一个右括号,就消消乐掉上一个左括号和匹配的字母且此题中一定为(AB)这种形式
# 我们消除掉的(AB)它变成了一个新的 A*B,返回到原来的字符串中
# 之后我们遇到的第二个右括号,又去找右括号左边的两位,注意此时的“两位”中“右边”一位就是我们上一步的“A*B"
# ,,,,
while True:
try:
a=int(input()) # a是个数 3
box = [input() for _ in range(a)] # box是一串数字字符串
c = input() # c是‘(ABC)’
box = [ [int(each.split(' ')[0]),int(each.split(' ')[1])] for each in box ]
#将box元素处理为[[1,2],[2,3]]这种
new = []
cal = 0
for i in c: # 对C中每一个遍历
if i=='(': # 若为左括号我们不管
pass
elif i.isalpha(): # 若为字母,new中每次取box中第一个(用box.pop(0)代表用一个删一个)
new.append(box.pop(0)) # 遇到字母我们给new中加一个[1,2]这种
elif i==')' and len(new)>=2: # ')' 若出现了右括号
# 注意 此处的坑壁,就是len(new)要大于2,否则下面不会出现倒数第二个,什么意思?就是为了防# 止出现输入的是‘A’,(题目中说了输入的矩阵个数是从1开始可以为1)
p,q,r = new[-2][0] , new[-1][0], new[-1][1] # 若出现右括号 我们需要对new中的倒数两个元素来做一次乘法,后记录增加于变量cal
cal += p*q*r
new.pop(-1) # 用掉的两个我们对最后一个删掉
new[-1] = [p,r] # 倒数第二个现在变成倒数第一个了,替换为乘法乘出来来的新矩阵
print(str(cal))
except:
break
查看10道真题和解析

