zoukankan      html  css  js  c++  java
  • [leetcode]Evaluate Division

    除法求值,先建立树,然后使用递归,主要不要进入环。

    后来发现x/x = 1.0这条边可以不用,这样只要记录node是不是访问过就可以。

    class Solution:
        def calcEquation(self, equations: List[List[str]], values: List[float], queries: List[List[str]]) -> List[float]:
            
            adjDict = {} # node -> [adjNodes...]
            valueDict = {} # (x, y) -> float
            
            for i in range(len(equations)): # make graph
                x, y = equations[i]
                if x not in adjDict:
                    adjDict[x] = set()
                # x / y
                adjDict[x].add(y)
                valueDict[(x, y)] = values[i]
                # y / x
                if y not in adjDict:
                    adjDict[y] = set()
                adjDict[y].add(x)
                valueDict[(y, x)] = 1.0 / values[i]
                # itself
                adjDict[x].add(x) 
                valueDict[(x, x)] = 1.0
                adjDict[y].add(y) 
                valueDict[(y, y)] = 1.0
                
            result = []            
    
            for query in queries:
                visitedQuery = [query]
                tmp = self.calValue(query, adjDict, valueDict, visitedQuery)
                if tmp is not None:
                    result.append(tmp)
                else:
                    result.append(-1.0)
                    
            return result
                
        # None for not exist
        def calValue(self, query, adjDict, valueDict, visitedQuery):
            x, y = query
            if (x, y) in valueDict:
                return valueDict[(x, y)]
            if x not in adjDict:
                return None
            for nextNode in adjDict[x]:
                if (nextNode, y) in visitedQuery:
                    continue
                visitedQuery.append((nextNode, y))
                tmp = self.calValue((nextNode, y), adjDict, valueDict, visitedQuery)
                visitedQuery.pop()               
                if tmp is not None:
                    return valueDict[(x, nextNode)] * tmp
                
            return None
    

      

  • 相关阅读:
    IR的评价指标之MRR
    双击启动tomcat中的startup.bat闪退原因及解决方法
    裁判文书网采集说明
    Java 验证码识别之多线程打码兔
    JVM 内存分配机制总结
    Java中多态的一些简单理解
    Java Callable并发编程模板
    JVM
    Command
    解决PHP下载文件时因时文件太大而报404错误
  • 原文地址:https://www.cnblogs.com/lautsie/p/12274565.html
Copyright © 2011-2022 走看看