这次看了并查集,但是我并没有实现,第一次接触并不想写
然后copy了一个同学深度遍历的代码,很好理解,将创建一个二维的字典(就暂且这么叫吧),然后
将各个字符串之间的关系储存在其中,最后深度遍历一遍利用x/y=i , y/z = j, 则x/z = i*j
还有数据结构创建方式 defaultdict(dict)创建的图
还有循环内创建set( ),在循环体的函数内是一个局部的“全局变量”,循环体内调用的函数竟然不会重新刷新重建
注意这个visited
查看代码
class Solution:
def calcEquation(self, equations: List[List[str]], values: List[float], queries: List[List[str]]) -> List[float]:
graph=defaultdict(dict)
for (a,b),v in zip(equations,values):
graph[a][b]=v
graph[b][a]=1/v
def dfs(s,e):
if s not in graph or e not in graph:
return -1
if s==e:
return 1
visited.add(s)
for i in graph[s]:
if i==e:
return graph[s][i]
if i not in visited:
ans=dfs(i,e)
if ans!=-1:
return graph[s][i]*ans
return -1
res=[]
for a,b in queries:
visited=set()
res.append(dfs(a,b))
return res