• [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
    

      

  • 相关阅读:
    Java暑期学习第二十天日报
    Java暑期学习第十六天日报
    Java暑期学习第十七天日报
    使用C#创建SQLServer的存储过程 附带图片
    ASP.NET树形
    什么时候使用webservice1
    ASPxGridView动态增加列
    winform中treeView使用通用类
    Winform使用C#实现Treeview节点"正在展开..."效果
    C#实现字符串加密解密类
  • 原文地址:https://www.cnblogs.com/lautsie/p/12274565.html
Copyright © 2020-2023  润新知