题解 | #矩阵乘法计算量估算# 递归找括号
矩阵乘法计算量估算
https://www.nowcoder.com/practice/15e41630514445719a942e004edc0a5b
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.Stack;
class Matrix{
int row;
int col;
}
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
static int count=0;
private static Matrix cal(Matrix a,Matrix b){
count+=(a.col*b.col*a.row);
Matrix result=new Matrix();
result.row=a.row;
result.col=b.col;
return result;
}
private static Matrix fun(Matrix[] m,String exp){
List<Matrix> list=new ArrayList<>();
char[] cs=exp.toCharArray();
for(int i=0;i<cs.length;i++){
if(cs[i]=='('){
int temp=1,j=i+1;
//找到最外层的括号
while(temp>0){
if(cs[j]=='(')
temp++;
else if(cs[j]==')')
temp--;
j++;
}
//递归找内层括号
Matrix result=fun(m,exp.substring(i+1,j-1));
list.add(result);
i=j-1;
}
if(cs[i]-'A'>=0 && cs[i]-'Z'<=0){
list.add(m[cs[i]-'A']);
}
//如果本层有两个元素了就计算
if(list.size()==2){
Matrix result=cal(list.get(0),list.get(1));
list.clear();
list.add(result);
}
}
return list.get(0);
}
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
int num=Integer.valueOf(s.nextLine());
Matrix[] matrices=new Matrix[num];
int i=0;
while(i<num){
Matrix matrix=new Matrix();
matrices[i]=matrix;
String[] cs=s.nextLine().split(" ");
matrices[i].row=Integer.valueOf(cs[0]);
matrices[i].col=Integer.valueOf(cs[1]);
i++;
}
String exp=s.nextLine();
s.close();
Matrix result=fun(matrices,exp);
// System.out.println(result.row+" "+result.col+" "+count);
System.out.println(count);
}
}
