399.Evaluate Division

1-将除法关系转换成图的搜素

class Solution {
    public double[] calcEquation(String[][] equations, double[] values, String[][] queries) {
        Map<String, Map<String, Double>> map = new HashMap<>();
        //generate graph;
        for(int i = 0; i < equations.length; i++){
            String[] num = equations[i];
            insertPair(map, num[0], num[1], values[i]);
            insertPair(map, num[1], num[0], 1.0 / values[i]);
        }

        double[] ans = new double[queries.length];
        for(int i = 0; i < queries.length; i++){
            String[] num = queries[i];
            Double res = doQuery(num[0], num[1], map, new HashSet<>());
            if(res == null)
                ans[i] = -1.0;
            else
                ans[i] = res;
        }
        return ans;   
    }

    public void insertPair(Map<String, Map<String, Double>> map, String num0, String num1, double value){
        Map<String, Double> tmpMap = map.getOrDefault(num0, new HashMap<>());
        tmpMap.put(num1, value);
        map.put(num0, tmpMap);
        return;
    }

    public Double doQuery(String num0, String num1, Map<String, Map<String, Double>> map, Set<String> visited){
        if(visited.contains(num0)){
            return null;
        }
        if(!map.containsKey(num0) || !map.containsKey(num1))
            return null;
        if(num0.equals(num1))
            return 1.0;
        visited.add(num0);
        Map<String, Double> tmpMap = map.get(num0);
        for(String key : tmpMap.keySet()){
            Double res = doQuery(key, num1, map, visited);
            if(res != null)
                return res * tmpMap.get(key);
        }
        visited.remove(num0);
        return null;
    }
}

results matching ""

    No results matching ""