*399除法求值

除法求值

给你一个变量对数组 equations 和一个实数值数组 values 作为已知条件,其中 equations[i] = [Ai, Bi] 和 values[i] 共同表示等式 Ai / Bi = values[i] 。每个 Ai 或 Bi 是一个表示单个变量的字符串。

另有一些以数组 queries 表示的问题,其中 queries[j] = [Cj, Dj] 表示第 j 个问题,请你根据已知条件找出 Cj / Dj = ? 的结果作为答案。

返回 所有问题的答案 。如果存在某个无法确定的答案,则用 -1.0 替代这个答案。如果问题中出现了给定的已知条件中没有出现的字符串,也需要用 -1.0 替代这个答案。

注意:输入总是有效的。你可以假设除法运算中不会出现除数为 0 的情况,且不存在任何矛盾的结果。

JAVA: 

class Cell{
    String str;//分母   
    double div;//A/B的结果

    Cell(String str,double div){
        this.str=str;
        this.div=div;
    }
}
class Solution {
    public double[] calcEquation(List<List<String>> equations, double[] values, List<List<String>> queries) {
        //构建图
        Map<String,List<Cell>> graph=new HashMap<>();
        for(int i=0;i<values.length;i++){
            String s1=equations.get(i).get(0),s2=equations.get(i).get(1);//0是分子,1是分母
            graph.computeIfAbsent(s1,k->new ArrayList()).add(new Cell(s2,values[i]));
            graph.computeIfAbsent(s2,k->new ArrayList()).add(new Cell(s1,1.0/values[i]));
        }
        //dfs前的准备
        double[] res=new double[queries.size()];
        Arrays.fill(res,-1.0);
        for(int i=0;i<queries.size();i++){
            dfs(queries.get(i).get(0),queries.get(i).get(1),1.0,graph,res,i,new HashSet<>());
        }
        return res;
    }

    public void dfs(String src,String dst,double cur,Map<String,List<Cell>> graph,double[] res,int index,Set<String> visited){
        if(!visited.add(src)){
            return;
        }
        if(src.equals(dst)&&graph.containsKey(src)){
            res[index]=cur;
            return;
        }
        for(Cell nei:graph.getOrDefault(src,new ArrayList<>())){
            dfs(nei.str,dst,cur*nei.div,graph,res,index,visited);
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值