題目: LeetCode - 399. Evaluate Division
題目說明
待編輯…
解題思路
待編輯…
參考解法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| class Solution { public: vector<double> calcEquation(vector<vector<string>>& equations, vector<double>& values, vector<vector<string>>& queries) { int n = equations.size(); vector<double> ret; unordered_map<string, unordered_map<string, double>> _m; for(int i{}; i < n; ++i) _m[equations[i][0]][equations[i][1]] = values[i], _m[equations[i][1]][equations[i][0]] = 1 / values[i]; for(auto& que : queries) { string& x = que[0], y = que[1]; if(!_m.count(x) || !_m.count(y)) { ret.emplace_back(-1.0); continue; } unordered_set<string> visited; ret.emplace_back(divide(x, y, _m, visited)); } return ret; } private: double divide(const string& A, const string& B, unordered_map<string, unordered_map<string, double>>& _m, unordered_set<string>& visited) { if(A == B) return 1.0; visited.insert(A); for(auto& [key, val] : _m[A]) { if(visited.count(key)) continue; double d = divide(key, B, _m, visited); if(d > 0) return d * _m[A][key]; } return -1.0; } };
|