栈+字符串 | HJ70 矩阵乘法计算量估算

# 最优代码
while True:
    try:
        n = int(input())
        arr = []
        order = []
        res = 0
        for i in range(n):
            arr.append(list(map(int, input().split())))
        f = input()
        for i in f:
            if i.isalpha():
                order.append(arr[ord(i) - 65])
            elif i == ')' and len(order) >= 2:
                a = order.pop()
                b = order.pop()
                res += b[0] * b[1] * a[1]
                order.append([b[0], a[1]])
        print(res)
    except:
        break

# 我的代码
def get_calcu_times(arrays, expr):
    q = []  # 栈中记录入栈的矩阵大小
    res = 0  # 返回计算次数
    for ch in expr:
        if ch >= 'A' and ch <= 'Z':  # 是矩阵则把该矩阵大小入栈
            q.append(arrays[ord(ch)-65])
        elif ch == ')':  # 遇到右括号,出栈两个矩阵计算,并入栈计算结果
            arr2_n, arr2_m = q.pop()
            arr1_n, arr1_m = q.pop()
            res += arr1_n * arr1_m * arr2_m
            q.append((arr1_n, arr2_m))
    return res

def main():
    arrays = []  # 记录各个矩阵大小
    num = int(input())  # 输入矩阵个数
    for i in range(num):
        n, m = input().split(' ')
        arrays.append((int(n), int(m)))
    expr = input()  # 输入表达式
    return get_calcu_times(arrays, expr)
print(main())

#栈#
华为笔试刷题 文章被收录于专栏

高质量题: 1~40:HJ16,HJ22,HJ24,HJ26,HJ27,HJ28,HJ35,HJ37,HJ39; 40~80:HJ41,HJ42,HJ43,HJ44,HJ48,HJ50,HJ52,HJ53,HJ57,HJ61,HJ63,HJ64,HJ70,HJ71,HJ74,HJ77; 80~108:HJ82,HJ85,HJ88,HJ89,HJ93,HJ95,HJ98,HJ103,HJ107

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务