[leetcode]Graph-399. Evaluate Division

Posted chenhan05

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[leetcode]Graph-399. Evaluate Division相关的知识,希望对你有一定的参考价值。

Equations are given in the format A / B = k, where  A and B are variables represented as strings, and k is a real number (floating point number). Given some queries, return the answers. If the answer does not exist, return -1.0.

Example:
Given a / b = 2.0, b / c = 3.0. 
queries are: a / c = ?, b / a = ?, a / e = ?, a / a = ?, x / x = ? . 
return [6.0, 0.5, -1.0, 1.0, -1.0 ].

The input is: vector<pair<string, string>> equations, vector<double>& values, vector<pair<string, string>> queries , where equations.size() == values.size(), and the values are positive. This represents the equations. Return vector<double>.

According to the example above:

equations = [ ["a", "b"], ["b", "c"] ],
values = [2.0, 3.0],
queries = [ ["a", "c"], ["b", "a"], ["a", "e"], ["a", "a"], ["x", "x"] ]. 

 

The input is always valid. You may assume that evaluating the queries will result in no division by zero and there is no contradiction.

class Solution {  
public:  
    vector<double> calcEquation(vector<pair<string, string>> equations,   
        vector<double>& values, vector<pair<string, string>> queries) {  
        unordered_map<string, unordered_map<string, double>> hash;  
        for(int i = 0; i < equations.size(); i++)   
        {  
            hash[equations[i].first][equations[i].second] = values[i];  
            hash[equations[i].second][equations[i].first] = 1/values[i];  
        }  
        for(auto val: hash) hash[val.first][val.first] = 1;  
        for(auto val1: hash)  
        {  
            for(auto val2: hash)  
                for(auto val3: hash)  
                    if(hash[val1.first].count(val3.first)   
                            && hash[val2.first].count(val1.first))  
                        hash[val2.first][val3.first] =   
                            hash[val2.first][val1.first]*hash[val1.first][val3.first];  
        }  
        vector<double> ans;  
        for(auto val: queries)  
            ans.push_back(hash[val.first].count(val.second)?hash[val.first][val.second]:-1);  
        return ans;  
    }  
};  

 




以上是关于[leetcode]Graph-399. Evaluate Division的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 227.基本计算器II

Leetcode刷题Python224. 基本计算器

eval作用域

eval与window.eval的差别

Eval与DataBinder.Eval的区别

eval()函数的作用是啥?