目录

一、题目内容

二、解题思路

三、代码


一、题目内容

给你一个变量对数组 equations 和一个实数值数组 values 作为已知条件,其中 equations[i] = [Ai, Bi] 和 values[i] 共同表示等式 Ai / Bi = values[i] 。每个 Ai 或 Bi 是一个表示单个变量的字符串。

另有一些以数组 queries 表示的问题,其中 queries[j] = [Cj, Dj] 表示第 j 个问题,请你根据已知条件找出 Cj / Dj = ? 的结果作为答案。

返回 所有问题的答案 。如果存在某个无法确定的答案,则用 -1.0 替代这个答案。

注意:输入总是有效的。你可以假设除法运算中不会出现除数为 0 的情况,且不存在任何矛盾的结果。

示例 1:

输入:equations = [["a","b"],["b","c"]], values = [2.0,3.0], queries = [["a","c"],["b","a"],["a","e"],["a","a"],["x","x"]]
输出:[6.00000,0.50000,-1.00000,1.00000,-1.00000]
解释:
条件:a / b = 2.0, b / c = 3.0
问题:a / c = ?, b / a = ?, a / e = ?, a / a = ?, x / x = ?
结果:[6.0, 0.5, -1.0, 1.0, -1.0 ]

示例 2:

输入:equations = [["a","b"],["b","c"],["bc","cd"]], values = [1.5,2.5,5.0], queries = [["a","c"],["c","b"],["bc","cd"],["cd","bc"]]
输出:[3.75000,0.40000,5.00000,0.20000]

示例 3:

输入:equations = [["a","b"]], values = [0.5], queries = [["a","b"],["b","a"],["a","c"],["x","y"]]
输出:[0.50000,2.00000,-1.00000,-1.00000]

提示:

1 <= equations.length <= 20
equations[i].length == 2
1 <= Ai.length, Bi.length <= 5
values.length == equations.length
0.0 < values[i] <= 20.0
1 <= queries.length <= 20
queries[i].length == 2
1 <= Cj.length, Dj.length <= 5
Ai, Bi, Cj, Dj 由小写英文字母与数字组成

二、解题思路

看着很唬人,实际上建图即可,graph里增加的是每个分式的分子和分母的对应关系,weight里是分式的值,还有对应的倒数, visited存储遍历过的起始节点;

DFS,查找graph里的已有分式条件,以及利用中间节点构建新的分式,无法构建则为0,查询则返回-1.0;

三、代码

from collections import defaultdictclass Solution:def calcEquation(self, equations: list, values: list, queries: list) -> list:""":type equations: List[List[str]]:type values: List[float]:type queries: List[List[str]]:rtype: List[float]"""gragh = defaultdict(set)weight = defaultdict()for i in range(len(equations)):gragh[equations[i][0]].add(equations[i][1])gragh[equations[i][1]].add(equations[i][0])weight[(equations[i][0], equations[i][1])] = values[i]weight[(equations[i][1], equations[i][0])] = float(1 / values[i])print(gragh)print(weight)def dfs(st, ed, visited):if (st, ed) in weight:return weight[(st, ed)]if st not in gragh or ed not in gragh or st in visited:return 0visited.add(st)res = 0for link in gragh[st]:res = (dfs(link, ed, visited)) * weight[(st, link)]if res != 0:weight[(st, ed)] = resbreakvisited.remove(st)return resres = []for q in queries:ans = dfs(q[0], q[1], set())if ans == 0:ans = -1.0res.append(ans)return resif __name__ == '__main__':equations = [["a", "b"],["b", "c"]]values = [2.0, 3.0]queries = [["a", "c"],["b", "a"],["a", "e"],["a", "a"],["x", "x"]]s = Solution()ans = s.calcEquation(equations, values, queries)print(ans)

leetcode_399. 除法求值相关推荐

  1. 【每日一题】除法求值

    文章目录 题目描述 题解 题目描述 399. 除法求值 给你一个变量对数组 equations 和一个实数值数组 values 作为已知条件,其中 equations[i] = [Ai, Bi] 和 ...

  2. LeetCode 399 除法求值 题解

    LeetCode 399 除法求值 题解 给你一个变量对数组 equations 和一个实数值数组 values 作为已知条件,其中 equations[i] = [Ai, Bi] 和 values[ ...

  3. LeetCode 399. 除法求值(图的DFS搜索)

    1. 题目 给出方程式 A / B = k, 其中 A 和 B 均为用字符串表示的变量, k 是一个浮点型数字. 根据已知方程式求解问题,并返回计算结果.如果结果不存在,则返回 -1.0. 示例 : ...

  4. leetcode 399. Evaluate Division | 399. 除法求值(图的邻接表,DFS)

    题目 https://leetcode.com/problems/evaluate-division/ 题解 题目看着复杂,实际上是图的 DFS. 例如,已知 a/b, b/c, c/d,想求 a/d ...

  5. leetcode 399. 除法求值(bfs)

    给你一个变量对数组 equations 和一个实数值数组 values 作为已知条件,其中 equations[i] = [Ai, Bi] 和 values[i] 共同表示等式 Ai / Bi = v ...

  6. 【LeetCode笔记】399. 除法求值(Java、图)

    文章目录 题目描述 思路 && 代码 题目描述 第二道图题,大概是hot100里唯二的图题了.. 思路 && 代码 邻接矩阵存储,g[i][j] 代表 i / j 的值 ...

  7. python和c语言的对比_类C语言与Python负数除法求值间的差异

    一直用Python做计算器用(有点大材小用了啊,呵呵).今天使用时,却发现一个诡异的现象,在C语言入门经典(第4版)说正负数除数取余操作的差别,就在Python上试验了一下,结果结成了完全不一样.下面 ...

  8. 并查集 - 除法求值

    题目链接 将所有等式关系转化为同一变量的倍数. class Solution {public:vector<double> calcEquation(vector<vector< ...

  9. 碾转相除法求 两个值 的最大公约数

    碾转相除法求 两个值 的最大公约数就是把 大的数 % 小的数,再用 除数(大) 去 % 得数(小) 一直循环  直到余数为0 那么那个余数为0的那条式子的除数就是这两个数的最大公约数 看图! 看图!

最新文章

  1. Windows Phone 7编程学习点滴一——页面切换、返回键重载和工具栏
  2. 软件测试--利用组合覆盖法设计测试用例
  3. java-com-util-common-service:BaseService.java
  4. Intel Realsense D435 多摄像头多线程目标识别架构
  5. SQL注入原理深度解析
  6. 制作centos6的启动光盘boot.iso
  7. subsequence 1(牛客多校第五场记忆化搜索+组合数学)
  8. python写选择排序_如何快速掌握python选择排序算法?
  9. Flagger on ASM·基于Mixerless Telemetry实现渐进式灰度发布系列 1 遥测数据
  10. Xpath路径表达式
  11. udp测试android,如何在安卓系统进行UDP和TCP网络测试?【安卓实战】
  12. 如何修复金蝶专用版服务器,金蝶KIS专业版常见问题及解决方法
  13. Go语言之interface详解
  14. QQ个性装扮气泡免费使用
  15. 使用Java校验【统一社会信用代码】真假
  16. 面向对象三大基本特性
  17. 【错误汇总】zabbix 监控偶遇问题一记
  18. 《Android深入透析》之Android事件分发机制
  19. logging level级别
  20. win10 任务栏全透明,一键设置(translucentTB)

热门文章

  1. Unable to create tempDir, java.io.tmpdir no space left on device
  2. DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Pytho
  3. macbook pro 怎么设置分屏_小米Pro要不要整黑苹果——Hackintosh浅度体验记录
  4. 阿里云ecs服务器挂载oss
  5. 两次拉格朗日中值证明曲线凹凸性定理_2016514
  6. 与 Oh My Zsh 不可错过的邂逅:如何离线安装 Oh My Zsh
  7. GIS中的坐标系问题
  8. 谭浩强c语言五位数的输入输出问题
  9. 日本服务器线路有什么区别?
  10. NestedTensor(DETR)