給出方程式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的情況,且不存在任何矛盾的結果。
思路:1、如果需要分析的除法式的除數和被除數如果其中任意乙個沒有在已知條件**現過,那麼返回結果-1,所以我們在分析已知條件的時候,可以使用hashmap來記錄所有出現過的字串。
2、對於每個已知條件,我們將其翻轉一下也存起來,那麼對於只要存在結果的表示式,都可以轉化為已知表示式的乘積。
3、對於每乙個需要解析的表示式,我們需要乙個hashset來記錄已經訪問過的表示式,避免重複計算。然後對其進行dfs。
(1)在dfs過程中,我們在hashmap中快速查詢該表示式,如果跟某乙個已知表示式相等,直接返回結果。
(2)如果沒有的話,那麼就需要間接dfs尋找已知表示式的乘積了,每次在hashmap中遍歷跟解析式中分子相同的已知條件。
class solution
return -1;
}vectorcalcequation(vector>& equations, vector& values, vector>& queries)
return re;
}};
399 除法求值
給出方程式a b k,其中a和b均為用字串表示的變數,k是乙個浮點型數字。根據已知方程式求解問題,並返回計算結果。如果結果不存在,則返回 1.0。輸入總是有效的。你可以假設除法運算中不會出現除數為 0 的情況,且不存在任何矛盾的結果。示例 1 輸入 equations a b b c values ...
399 除法求值
給你乙個變數對陣列 equations 和乙個實數值陣列 values 作為已知條件,其中 equations i ai,bi 和 values i 共同表示等式 ai bi values i 每個 ai 或 bi 是乙個表示單個變數的字串。另有一些以陣列 queries 表示的問題,其中 quer...
399 除法求值
給你乙個變數對陣列 equations 和乙個實數值陣列 values 作為已知條件,其中 equations i ai,bi 和 values i 共同表示等式 ai bi values i 每個 ai 或 bi 是乙個表示單個變數的字串。另有一些以陣列 queries 表示的問題,其中 quer...