leetcode_399. 除法求值
目录
一、题目内容
二、解题思路
三、代码
一、题目内容
给你一个变量对数组 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. 除法求值相关推荐
- 【每日一题】除法求值
文章目录 题目描述 题解 题目描述 399. 除法求值 给你一个变量对数组 equations 和一个实数值数组 values 作为已知条件,其中 equations[i] = [Ai, Bi] 和 ...
- LeetCode 399 除法求值 题解
LeetCode 399 除法求值 题解 给你一个变量对数组 equations 和一个实数值数组 values 作为已知条件,其中 equations[i] = [Ai, Bi] 和 values[ ...
- LeetCode 399. 除法求值(图的DFS搜索)
1. 题目 给出方程式 A / B = k, 其中 A 和 B 均为用字符串表示的变量, k 是一个浮点型数字. 根据已知方程式求解问题,并返回计算结果.如果结果不存在,则返回 -1.0. 示例 : ...
- leetcode 399. Evaluate Division | 399. 除法求值(图的邻接表,DFS)
题目 https://leetcode.com/problems/evaluate-division/ 题解 题目看着复杂,实际上是图的 DFS. 例如,已知 a/b, b/c, c/d,想求 a/d ...
- leetcode 399. 除法求值(bfs)
给你一个变量对数组 equations 和一个实数值数组 values 作为已知条件,其中 equations[i] = [Ai, Bi] 和 values[i] 共同表示等式 Ai / Bi = v ...
- 【LeetCode笔记】399. 除法求值(Java、图)
文章目录 题目描述 思路 && 代码 题目描述 第二道图题,大概是hot100里唯二的图题了.. 思路 && 代码 邻接矩阵存储,g[i][j] 代表 i / j 的值 ...
- python和c语言的对比_类C语言与Python负数除法求值间的差异
一直用Python做计算器用(有点大材小用了啊,呵呵).今天使用时,却发现一个诡异的现象,在C语言入门经典(第4版)说正负数除数取余操作的差别,就在Python上试验了一下,结果结成了完全不一样.下面 ...
- 并查集 - 除法求值
题目链接 将所有等式关系转化为同一变量的倍数. class Solution {public:vector<double> calcEquation(vector<vector< ...
- 碾转相除法求 两个值 的最大公约数
碾转相除法求 两个值 的最大公约数就是把 大的数 % 小的数,再用 除数(大) 去 % 得数(小) 一直循环 直到余数为0 那么那个余数为0的那条式子的除数就是这两个数的最大公约数 看图! 看图!
最新文章
- Windows Phone 7编程学习点滴一——页面切换、返回键重载和工具栏
- 软件测试--利用组合覆盖法设计测试用例
- java-com-util-common-service:BaseService.java
- Intel Realsense D435 多摄像头多线程目标识别架构
- SQL注入原理深度解析
- 制作centos6的启动光盘boot.iso
- subsequence 1(牛客多校第五场记忆化搜索+组合数学)
- python写选择排序_如何快速掌握python选择排序算法?
- Flagger on ASM·基于Mixerless Telemetry实现渐进式灰度发布系列 1 遥测数据
- Xpath路径表达式
- udp测试android,如何在安卓系统进行UDP和TCP网络测试?【安卓实战】
- 如何修复金蝶专用版服务器,金蝶KIS专业版常见问题及解决方法
- Go语言之interface详解
- QQ个性装扮气泡免费使用
- 使用Java校验【统一社会信用代码】真假
- 面向对象三大基本特性
- 【错误汇总】zabbix 监控偶遇问题一记
- 《Android深入透析》之Android事件分发机制
- logging level级别
- win10 任务栏全透明,一键设置(translucentTB)
热门文章
- Unable to create tempDir, java.io.tmpdir no space left on device
- DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Pytho
- macbook pro 怎么设置分屏_小米Pro要不要整黑苹果——Hackintosh浅度体验记录
- 阿里云ecs服务器挂载oss
- 两次拉格朗日中值证明曲线凹凸性定理_2016514
- 与 Oh My Zsh 不可错过的邂逅:如何离线安装 Oh My Zsh
- GIS中的坐标系问题
- 谭浩强c语言五位数的输入输出问题
- 日本服务器线路有什么区别?
- NestedTensor(DETR)