Evaluate Division

https://leetcode.com/contest/leetcode-weekly-contest-4/problems/evaluate-division/

已经遇到两次了,比较trick的地方是要构建一个nested dictionary

在遍历时把

d[a][b]
d[b][a]
都存进去,然后通过 a/b * b / k = a / k
这样b可以被抵消掉的关系通过a,b,k 把所有通过 a - b, b - k 推倒出a - k的关系都求出来
最后检查query是否满足条件即可
from collections import defaultdict
class Solution:
    def calcEquation(self, equations: List[List[str]], values: List[float], queries: List[List[str]]) -> List[float]:
        d = defaultdict(dict)
        for eq, val in zip(equations,values):
            a,b = eq
            d[a][a] =1 
            d[b][b] = 1
            d[a][b] = val
            d[b][a] = 1/val
        
        for k in d:
            for i in d[k]:
                for j in d[k]:
                    d[i][j] = d[i][k] * d[k][j]
                    d[j][i] = 1 / d[i][j]
        
        return [d[a][b] if a in d and b in d[a] else -1 for a,b in queries]

Last updated

Was this helpful?