leetcode399 除法求值

2021-10-01 10:32:50 字數 1789 閱讀 5258

給出方程式 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 ]

輸入為: vector> equations, vector& values, vector> queries(方程式,方程式結果,問題方程式), 其中 equations.size() == values.size(),即方程式的長度與方程式結果長度相等(程式與結果一一對應),並且結果值均為正數。以上為方程式的描述。 返回vector型別。

基於上述例子,輸入如下:

equations(方程式) = [ ["a", "b"], ["b", "c"] ],

values(方程式結果) = [2.0, 3.0],

queries(問題方程式) = [ ["a", "c"], ["b", "a"], ["a", "e"], ["a", "a"], ["x", "x"] ]. 

輸入總是有效的。你可以假設除法運算中不會出現除數為0的情況,且不存在任何矛盾的結果。

個人感覺難度應該設為hard比較合理。

構造乙個雙向圖,比如a/b=2.0,那麼a->b權重2.0,b->a權重0.5,要查的時候就用bfs遍歷,每到乙個新節點,就乘以權重,找到目標節點時返回當前值即可。

首先,我們分析一下要怎麼判斷。沒有出現過的字母直接返回-1.0,然後一樣的字母直接返回1.0。這時就可以計算兩點距離了。

class solution(object):

def calcequation(self, equations, values, queries):

""":type equations: list[list[str]]

:type values: list[float]

:type queries: list[list[str]]

:rtype: list[float]

"""unordered_map={}

n = len(equations)

# python字典中的值為列表或字典的構造方法

for i in range(n):

size = len(unordered_map)

res =

for querie in queries:

vis = set()

return res

def getdist(self, a, b,unordered_map, vis):

if a not in unordered_map or b not in unordered_map:

return -1.0

if a == b:

return 1.0

q=vis.add(a)

ret = -1.0

while q:

t = q.pop()

vis.add(t[0])

if t[0] == b:

ret = t[1]

break

for pr in unordered_map[t[0]]:

c = pr[0]

val = pr[1]

if c not in vis:

return ret

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

帶權並查集 Leetcode 399 除法求值

構建帶權值邊的並查集,對於每個方程式有兩種情況 查詢是否聯通,若不聯通,則答案為 1.0 若聯通,則求出其與根相除的結果,根據結果計算方程式。例如,對於題目示例 構造並查集 a b c,其中a b的邊的權值為2.0,b c的邊的權值為3.0 以計算b a時為例,以root結點為橋梁,計算b a的值 ...