ac**:
classsolution(object):defcalcequation(self
, equations, values, queries):
""":type
equations: list[list[str]]
:type
values: list[float]
:type
queries: list[list[str]]
:rtype
: list[float]
"""graph = {}
visited = {}
# build the graph like [},}]
foriinrange(len(equations)):
ifequations[i][0]not ingraph:
graph[equations[i][0]] =
visited[equations[i][0]] = false
else:
graph[equations[i][0]][equations[i][1]]=values[i]
ifvalues[i] == 0:
continueifequations[i][1]not ingraph:
graph[equations[i][1]] =
visited[equations[i][1]] = false
else:
graph[equations[i][1]][equations[i][0]]=1/values[i]
results =
res = -1.0
foriinrange(len(queries)):
ifqueries[i][0]not ingraph:
res = -1.0
continueifqueries[i][0] == queries[i][1]:
res = 1.0
continueifqueries[i][1]ingraph[queries[i][0]]:
res = graph[queries[i][0]][queries[i][1]]
continuevisited[queries[i][0]] = true
forkeyingraph[queries[i][0]]:
visited[key] = true
res = self.dfs(graph,key,queries[i][1],graph[queries[i][0]][key],visited)
visited[key] = false
ifres != -1.0:
breakvisited[queries[i][0]] = false
returnresults
defdfs(self
,graph,start,end,res,visited):
ifendingraph[start]:
res = res*graph[start][end]
returnres
forkeyingraph[start]:
ifvisited[key] == true:
continuevisited[key] = true
res = self.dfs(graph,key,end,res*graph[start][key],visited)
visited[key] = false
ifres != -1.0:
returnres
return-1.0
解題思路:利用dicts建圖,形式為[},}],然後使用深度優先搜尋,對於不在dicts中的點直接返回-1,如果一次query中兩點相等,返回1,否則進行深度優先搜尋。參考了的方法,建立乙個visited詞典,儲存該點是否訪問過,避免形成環。
leetcode399 除法求值
給出方程式 a b k,其中 a 和 b 均為代表字串的變數,k 是乙個浮點型數字。根據已知方程式求解問題,並返回計算結果。如果結果不存在,則返回 1.0。示例 給定 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 輸入為 ...
leetcode 399 除法求值
查詢改進 給出方程式 a b k,其中 a 和 b 均為用字串表示的變數,k 是乙個浮點型數字。根據已知方程式求解問題,並返回計算結果。如果結果不存在,則返回 1.0。示例 給定 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....
leetcode 399 除法求值
399.除法求值 給出方程式 a b k,其中 a 和 b 均為用字串表示的變數,k 是乙個浮點型數字。根據已知方程式求解問題,並返回計算結果。如果結果不存在,則返回 1.0。示例 給定 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....