目录

一、题目内容

二、解题思路

三、代码


一、题目内容

给你一个变量对数组 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. 谷歌年初将推低价平板电脑 与亚马逊竞争
  2. Python使用QRCode模块生成二维码
  3. APP启动速度是门面,如何做到极致优化?
  4. opengl代码实例_OpenGL-打开一个窗口
  5. 【小米校招笔试】假如已知有n个人和m对好友关系(存于数字r)。如果两个人是直接或间接的好友(好友的好友的好友...),则认为他们属于同一个朋友圈,请写程序求出这n个人里一共有多少个朋友圈。
  6. 某大型企业私有云建设思路解析
  7. BNU OJ 第26303 题 Touchscreen Keyboard
  8. 【echart】showLoading hideLoading 无数据时显示正在加载
  9. iOS7新特性的兼容性处理方法 之三
  10. Impala操作审计
  11. Birth-Death process 生灭过程
  12. Linux中vim命令详解
  13. 强化学习之Q-learning简介
  14. 各个国家/地区以及对应的手机区号
  15. 正确模仿别人的php项目,一个模仿oso的php论坛程序(之一)第1/2页
  16. could not find function 函数名
  17. 计算机显示器模糊,显示器模糊,我来教您电脑显示器模糊怎么办
  18. 广西壮族自治区公安厅信息中心异地容灾系统(三期)项目招标
  19. python回复qq_「转」使用python发送qq消息
  20. delta对冲策略_期权的Delta对冲策略对比分析

热门文章

  1. ubuntu系统出错且无法恢复请联系管理员(A problem has occurred and the system can‘t recover,please contact the admini)
  2. 如何做一个基于JAVA餐厅座位预定系统毕业设计毕设作品(springboot框架)
  3. 沟通的技巧与训练方式
  4. html中lt;metagt;和lt;basegt;标记,html头标签meta实现refresh重定向
  5. WiderFace数据集用于训练人脸检测模型
  6. 贵阳 计算机就业,学计算机专业就业率高值得信赖_贵阳经济技术学校
  7. [zz from newsmth]王大牛的Memory Model白话系列(2)
  8. Radeon Gpu源码分析
  9. Python基础教程:基本数据类型之布尔类型(Boolean)
  10. 基于springboot高考填报志愿综合参考系统设计与实现-计算机毕业设计源码+LW文档