399. Evaluate Division
2017-01-14 15:42
232 查看
结题思路是:
a/b=v
可以看成是一个又a点指向b点的有向图 边的权值为v
有了a指向b的边 就有 b指向a的边 大小为1/v
则求 c/v 的话就是在图中寻找一条由c指向v的边 将边上所有的权值相乘即可。
a/b=v
可以看成是一个又a点指向b点的有向图 边的权值为v
有了a指向b的边 就有 b指向a的边 大小为1/v
则求 c/v 的话就是在图中寻找一条由c指向v的边 将边上所有的权值相乘即可。
public class Solution { public double[] calcEquation(String[][] equations, double[] values, String[][] queries) { HashMap<String,ArrayList<String>> pairs=new HashMap<String,ArrayList<String>>(); HashMap<String,ArrayList<Double>> valuepairs=new HashMap<String,ArrayList<Double>>(); for(int i=0;i<equations.length;i++){ String[] equation = equations[i]; if(!pairs.containsKey(equation[0])){ pairs.put(equation[0], new ArrayList<String>()); } if(!pairs.containsKey(equation[1])){ pairs.put(equation[1], new ArrayList<String>()); } if(!valuepairs.containsKey(equation[0])){ valuepairs.put(equation[0],new ArrayList<Double>()); } if(!valuepairs.containsKey(equation[1])){ valuepairs.put(equation[1], new ArrayList<Double>()); } pairs.get(equation[0]).add(equation[1]); pairs.get(equation[1]).add(equation[0]); valuepairs.get(equation[0]).add(values[i]); valuepairs.get(equation[1]).add(1/values[i]); } double[] result=new double[queries.length]; for(int i=0;i<queries.length;i++) { double temp=DFS(queries[i][0],queries[i][1],pairs,valuepairs,new HashSet<String>(),1.0); if(temp==0.0) result[i]=-1.0; else result[i]=temp; } return result; } private double DFS(String start,String end,HashMap<String,ArrayList<String>> pairs,HashMap<String,ArrayList<Double>> valuepairs,HashSet<String> s,double value){ if(s.contains(start)) return 0.0; if(!pairs.containsKey(start)) return 0.0; if(start.equals(end)) return value; s.add(start); ArrayList<String> pair=pairs.get(start); ArrayList<Double> valuepair=valuepairs.get(start); double temp=0.0; for(int i=0;i<pair.size();i++){ temp=DFS(pair.get(i),end,pairs,valuepairs,s,value*valuepair.get(i)); if(temp!=0.0) break; } s.remove(start); return temp; } }
相关文章推荐
- 399. Evaluate Division
- 399. Evaluate Division
- 399. Evaluate Division
- 399. Evaluate Division
- 399. Evaluate Division
- 399. Evaluate Division
- 399. Evaluate Division
- LeetCode 399.Evaluate Division & 332.Reconstruct Itinerary
- 399. Evaluate Division
- 399. Evaluate Division
- 399. Evaluate Division
- 399. Evaluate Division
- 399. Evaluate Division
- 399. Evaluate Division
- 399. Evaluate Division
- 399. Evaluate Division
- 399. Evaluate Division
- Leetcode evaluate Division
- LeetCode Graph:M399. Evaluate Division
- evaluate-division