Leetcode 399 python 解題報告

2021-07-27 14:30:28 字數 2671 閱讀 8769

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....