题解 | #矩阵乘法计算量估算#
矩阵乘法计算量估算
https://www.nowcoder.com/practice/15e41630514445719a942e004edc0a5b
package main
import (
"fmt"
)
type Matrix struct {
Row int
Col int
}
func calTwoMatrixMulCount(rowA int, rowB int, colA int, colB int) int {
return rowA * colB * colA
}
func calMulCount(s string, matrixMap map[byte]Matrix) int {
var cnt int
var stk1 []Matrix
var stk2 []byte
for i:=0; i<len(s); i++ {
if s[i] == '(' {
stk2 = append(stk2, s[i])
} else if s[i] == ')' {
m1, m2 := stk1[len(stk1)-2], stk1[len(stk1)-1]
stk1 = stk1[:len(stk1)-2]
cnt += calTwoMatrixMulCount(m1.Row, m1.Col, m2.Row, m2.Col)
stk1 = append(stk1, Matrix{Row:m1.Row, Col: m2.Col})
// 弹出左括号
stk2 = stk2[:len(stk2)-1]
} else {
matrix := matrixMap[s[i]]
stk1 = append(stk1, Matrix{Row: matrix.Row, Col: matrix.Col})
}
}
return cnt
}
func main() {
var n int
fmt.Scan(&n)
matrixMap := make(map[byte]Matrix)
startIndex := byte('A')
for i:=0; i<n; i++ {
var row, col int
fmt.Scan(&row, &col)
matrixMap[byte(int(startIndex)+i)] = Matrix{Row: row, Col: col}
}
var s string
fmt.Scan(&s)
cnt := calMulCount(s, matrixMap)
fmt.Println(cnt)
}
// 本题输入为每行两个整数,所以采用:fmt.Scan(&row, &col)
安克创新 Anker公司福利 782人发布