399. Evaluate Division
来源:互联网 发布:计算机专业不喜欢编程 编辑:程序博客网 时间:2024/06/05 10:38
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.
DFS:public class Solution { public double[] calcEquation(String[][] equations, double[] values, String[][] queries) { Map<String,Map<String,Double>> map=new HashMap<>();// 邻接表 Set<String> set=new HashSet<>(); for(int i=0;i<equations.length;i++){ //创建图 set.add(equations[i][0]); set.add(equations[i][1]); Map<String,Double> m; if(map.containsKey(equations[i][0])){ m=map.get(equations[i][0]); } else{ m=new HashMap<>(); } m.put(equations[i][1],values[i]); map.put(equations[i][0],m); if(map.containsKey(equations[i][1])){ m=map.get(equations[i][1]); }else{ m=new HashMap<>(); } m.put(equations[i][0],1.0/values[i]); map.put(equations[i][1],m); } double[] res=new double[queries.length]; for(int i=0;i<queries.length;i++){ Map<String,Boolean> visited=new HashMap<>(); //用于判断是否访问过节点 for(String it:set){ visited.put(it,false); } if(queries[i][0].equals(queries[i][1])&&set.contains(queries[i][0])){ res[i]=1; continue; } double result=dfs(map,queries[i][0],queries[i][1],1.0,visited); res[i]=result; } return res; } public double dfs(Map<String,Map<String,Double>> map,String t,String s,double res,Map<String,Boolean> visited){ if(map.containsKey(t)&&!visited.get(t)){ visited.put(t,true); Map<String,Double> m=map.get(t); if(m.containsKey(s)) return res*m.get(s); else{ for(String it:m.keySet()){ double tmp=dfs(map,it,s,res*m.get(it),visited); if(tmp!=-1.0){ return tmp; } } } }else{ return -1.0; } return -1.0; }}
- 【Leetcode】399. Evaluate Division
- [leetcode]399. Evaluate Division
- 399. Evaluate Division
- leetcode:399. Evaluate Division
- 399. Evaluate Division
- LeetCode 399. Evaluate Division
- 399. Evaluate Division
- 399. Evaluate Division
- 399. Evaluate Division
- [leetcode]399. Evaluate Division
- Leetcode 399. Evaluate Division
- 399. Evaluate Division
- 399. Evaluate Division
- 399. Evaluate Division
- [LeetCode]399. Evaluate Division
- LeetCode: 399. Evaluate Division
- Leetcode-399. Evaluate Division
- 399. Evaluate Division
- 浏览器自动填写问卷或者单选/表单等
- sqlserver数据库备份与还原语句
- 比较两个时分秒时间的大小
- Win10安装IIS并配置ASP.NET 4.0
- 华为oj初级 输入n个整数,输出其中最小的k个
- 399. Evaluate Division
- 跳转到AppStore评分
- Android studio 下打包jar包
- Android4.4 CTS测试Fail项修改总结(一)
- 详解Android中AsyncTask的使用
- 蓝桥杯第七届 方格填数(dfs)
- js 实现网页一个一个字打印出来的效果
- 判断一个日期是否是周六、周日
- React-native 开发遇到的问题