1. 题目
读题
考查点
2. 解法
思路
代码逻辑
具体实现
import java.util.Scanner;
import java.util.Stack;
public class MatrixMultiplicationEstimation {
public static void main(String[] args) {
// 创建一个扫描器对象,用来接收用户的输入
Scanner scanner = new Scanner(System.in);
// 输入矩阵的个数
int n = scanner.nextInt();
// 创建一个二维数组,用来存储每个矩阵的行列数
int[][] input = new int[n][2];
// 循环输入每个矩阵的行列数
for (int i = 0; i < n; i++) {
input[i][0] = scanner.nextInt(); // 输入第i个矩阵的行数
input[i][1] = scanner.nextInt(); // 输入第i个矩阵的列数
}
// 输入矩阵乘法的顺序,这是一个由左右括号和大写字母组成的字符串
String order = scanner.next();
// 创建一个栈对象,用来存储字符和数字
Stack<Object> stack = new Stack<>();
// 初始化乘法次数为0
int count = 0;
// 从左到右扫描字符串
for (int i = 0; i < order.length(); i++) {
char c = order.charAt(i); // 获取当前字符
if (c == '(') { // 如果是左括号,就压入栈中
stack.push(c);
} else if (c >= 'A' && c <= 'Z') { // 如果是字母,就将对应的矩阵行列数压入栈中
stack.push(input[c - 'A'][0]); // 压入矩阵的行数
stack.push(input[c - 'A'][1]); // 压入矩阵的列数
} else if (c == ')') { // 如果是右括号,就从栈中弹出两对数,并计算它们相乘的结果和乘法次数,并将结果再压入栈中
int col2 = (int) stack.pop(); // 弹出第二个矩阵的列数
int row2 = (int) stack.pop(); // 弹出第二个矩阵的行数
stack.pop(); // 弹出左括号
int col1 = (int) stack.pop(); // 弹出第一个矩阵的列数
int row1 = (int) stack.pop(); // 弹出第一个矩阵的行数
count += row1 * col1 * col2; // 计算乘法次数,并累加到总次数中
stack.push(row1); // 将结果的行数压入栈中
stack.push(col2); // 将结果的列数压入栈中
}
}
// 输出最小的乘法次数和最终结果的行列数
System.out.println(count + " " + stack.pop() + " " + stack.pop());
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2022-07-28 leetcode-1853. 转换日期格式
2022-07-28 leetcode-1211. 查询结果的质量和占比
2021-07-28 CC邮件抄送文化
2019-07-28 shoshana-摄影文集
2019-07-28 shoshana-技术文集