当前位置: 首页 > backend >正文

399. 除法求值

https://leetcode.cn/problems/evaluate-division/description/?envType=study-plan-v2&envId=top-interview-150

思路:读完题后我们可以发现这题的考察已经很明确了就是考我们矩阵,我们将矩阵构建出来后,这题就变成可达性分析题了。
所以解题步骤就是:1.构建矩阵 2.递归判断是否可达

class Solution {public double[] calcEquation(List<List<String>> equations, double[] values, List<List<String>> queries) {// 处理所有出现的运算数int cnt = 0;HashMap<String, Integer> ch = new HashMap<>();for(int i = 0; i < equations.size(); i++) {String num1 = equations.get(i).get(0);String num2 = equations.get(i).get(1);if(!ch.containsKey(num1)) {ch.put(num1, cnt++);}if(!ch.containsKey(num2)) {ch.put(num2, cnt++);}}// 填充矩阵double[][] matrix = new double[cnt][cnt];for(int i = 0; i < equations.size(); i++) {String num1 = equations.get(i).get(0);String num2 = equations.get(i).get(1);matrix[ch.get(num1)][ch.get(num2)] = values[i];matrix[ch.get(num2)][ch.get(num1)] = 1.0 / values[i];}double[] res = new double[queries.size()];for(int i = 0; i < queries.size(); i++) {String num1 = queries.get(i).get(0);String num2 = queries.get(i).get(1);if(!ch.containsKey(num1) || !ch.containsKey(num2)) { // 如果出现没有出现的运算数,则直接返回-1res[i] = -1.0;} else { // 递归寻找可达路径// 标记某点是否到达过boolean[] signed = new boolean[cnt];signed[ch.get(num1)] = true;double sum = 1;res[i] = dfs(matrix, ch.get(num1), ch.get(num2), signed);}}return res;}public double dfs(double[][] matrix, int i, int j, boolean[] signed) {if(matrix[i][j] != 0) { // 如果可达,则直接返回结果return matrix[i][j];}double sum = 1;for(int k = 0; k < matrix.length; k++) {if(matrix[i][k] != 0 && !signed[k]) { // 如果可达且未到达过signed[k] = true;double dd = dfs(matrix, k, j, signed); // 递归寻找可达路径if(dd != -1) { // 如果可达就乘上权重sum *= matrix[i][k] * dd;return sum;}}}// 遍历所有情况没有找到可达路径就返回-1return -1;}public static void main(String[] args) {List<List<String>> equations = new ArrayList<>();equations.add(new ArrayList<>(List.of("x1","x2")));equations.add(new ArrayList<>(List.of("x2","x3")));equations.add(new ArrayList<>(List.of("x3","x4")));equations.add(new ArrayList<>(List.of("x4","x5")));double[] values = {3.0,4.0,5.0,6.0};List<List<String>> queries = new ArrayList<>();queries.add(new ArrayList<>(List.of("x1","x5")));queries.add(new ArrayList<>(List.of("x5","x2")));queries.add(new ArrayList<>(List.of("x2","x4")));queries.add(new ArrayList<>(List.of("x2","x2")));queries.add(new ArrayList<>(List.of("x2","x9")));queries.add(new ArrayList<>(List.of("x9","x9")));System.out.println(Arrays.toString(new Solution().calcEquation(equations, values, queries)));}
}

http://www.xdnf.cn/news/6425.html

相关文章:

  • 自然资源和空间数据应用平台
  • 深度学习框架---TensorFlow概览
  • 【vue】【环境配置】项目无法npm run serve,显示node版本过低
  • 【2025最新】VSCode Cline插件配置教程:免费使用Claude 3.7提升编程效率
  • Unity光照笔记
  • 解决Mawell1.29.2启动SQLException: You have an error in your SQL syntax问题
  • Java EE初阶——线程安全
  • 死锁(Deadlock)知识点详解
  • 青少年气胸术后护理要点清单
  • Cursor安全漏洞事件深度解析:当AI编程工具成为供应链攻击的新战场
  • WebGL 3着色器和GLSL
  • Elasticsearch性能调优全攻略:从日志分析到集群优化
  • C++多态实现的必要条件剖析
  • 架构进阶:企业流程框架设计思路【附全文阅读】
  • 微信小程序van-dialog确认验证失败时阻止对话框的关闭
  • Spring 模拟转账开发实战
  • 什么是红海战略?了解红海战略的竞争目标
  • (面试)Handler消息处理机制原理
  • 基于Deeplearning4j的多源数据融合预测模型实现:从设计到落地全解析
  • 【frp XTCP 穿透配置教程
  • 关于AI人工智能的知识图谱简介
  • 2025认证杯数学建模第二阶段A题小行星轨迹预测思路+模型+代码
  • Framebuffer显示bmp图片
  • 【实证分析】MDA文本相似度分析(2008-2023年)
  • 基于redis实现分布式锁方案实战
  • Linux:理解文件系统
  • 网络损伤仪功能介绍与应用场景剖析
  • Java详解LeetCode 热题 100(17):LeetCode 41. 缺失的第一个正数(First Missing Positive)详解
  • JavaScript的BOM、DOM编程
  • Java并发编程:CAS操作