总体没有特别需要解释的。
比较在意的一点:如果出现(A(ABC)D),类似这种一个括号里有超过2个矩阵的例子,应该如何计算。
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner scan=new Scanner(System.in);
int n=scan.nextInt();
int[][] matrix=new int[n][2];//储存矩阵内容
for(int i=0;i<n;i++){
matrix[i][0]=scan.nextInt();
matrix[i][1]=scan.nextInt();
}
String input=scan.next();//输入的计算法则
//输出结果
System.out.println(solve(matrix,input));
}
//解决方案
public static int solve(int[][] matrix, String input){
int sum=0;
Stack<Integer> stack=new Stack<>();//储存参与运算的矩阵
for(int i=0;i<input.length();i++){
char item=input.charAt(i);
int location=item-'A';
//如果字符为字母,则将该字母对应矩阵内容放入栈中,并记录存储了1个矩阵
if(item<='Z' && item>='A'){
stack.push(matrix[location][0]);
stack.push(matrix[location][1]);
}else if(item==')'){//如果字符为“)”,则表示第一个括号结束,可以开始计算
int y1=stack.pop();
int x1=stack.pop();
int y0=stack.pop();
int x0=stack.pop();
//计算乘法次数,并加入sum
sum+=x0*y0*y1;
//将新得到的矩阵放入栈中
stack.push(x0);
stack.push(y1);
}else if(item=='('){
continue;
}
}
return sum;
}
}

京公网安备 11010502036488号