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 ]

输入为: 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的情况,且不存在任何矛盾的结果

思路:用一个HashMap映射字符串到一个数字序号的索引,将方程式中的点构成一个图,
例如equations(方程式) = [ ["a", "b"], ["b", "c"] ], 可以构成a->b,b->c的图,权重即为a/b和b/c;
之后进行计算,凡是图中可以到达的地方,便重新计算出权值。

class Solution {

    double[][] map ;
    public double[] calcEquation(String[][] equations, double[] values, String[][] queries) {

        map = new double[26][26];
        Map hashMap = new HashMap<>();
        int count = 0;
        for (int i=0;i0){
                    for (int k = 0; k0){
                            map[i][k] = map[i][j] * map[j][k];
                        }
                    }
                }
            }
        }

        double[] result = new double[queries.length];

        for (int i=0;i

你可能感兴趣的:(LeetCode399. 除法求值)