我正在练习一些LeetCode类问题,遇到了以下问题:
Given a list of currency pairs and the rates between these two currencies:
// USD = 6.4CNY, CNY = 0.13 EUR, EUR = 0.87 GBP, GBP = 89.4 INR
//
// Question: Input two currencies, return the rate
// Example: CNY, INR; return 10.1111
// Complexity?
想知道是否有任何Python3方法可以解决这个问题?看起来像是广度优先的搜索问题。关于如何解决这个问题有什么线索吗?谢谢
评论:
我在这里看到了一个解决方案:
class Solution(object):
def calcEquation(self, equations, values, queries):
graph = {}
def build_graph(equations, values):
def add_edge(f, t, value):
if f in graph:
graph[f].append((t, value))
else:
graph[f] = [(t, value)]
for vertices, value in zip(equations, values):
f, t = vertices
add_edge(f, t, value)
add_edge(t, f, 1/value)
def find_path(query):
b, e = query
if b not in graph or e not in graph:
return -1.0
q = collections.deque([(b, 1.0)])
visited = set()
while q:
front, cur_product = q.popleft()
if front == e:
return cur_product
visited.add(front)
for neighbor, value in graph[front]:
if neighbor not in visited:
q.append((neighbor, cur_product*value))
return -1.0
build_graph(equations, values)
return [find_path(q) for q in queries]
s=Solution()
不知道如何测试这个函数
s.calcEquation('USD/CNY=?, CNY/EUR = ?, EUR/GBP = ?, GBP/INR = ?', '6.4, 0.13, 0.87, 89.4','CNY/INR=?')
给我错误信息
Traceback (most recent call last):
File "/home/coderpad/solution.py", line 45, in <module>
s.calcEquation('USD/CNY=?, CNY/EUR = ?, EUR/GBP = ?, GBP/INR = ?', '6.4, 0.13, 0.87, 89.4','CNY/INR=?')
File "/home/coderpad/solution.py", line 39, in calcEquation
build_graph(equations, values)
File "/home/coderpad/solution.py", line 15, in build_graph
f, t = vertices
ValueError: not enough values to unpack (expected 2, got 1)
我想这是可行的,但是这里不需要
values
变量,因为它们已经在equations
中了在这里,我们使用
re.findall()
来获得这三个所需的字符串(货币和比率),然后我们将循环:从技术上讲,如果不想,您不必手动添加
values
。我们可以安全地删除values
变量:输出
正则表达式电路
jex.im可视化正则表达式:
如果您希望简化/更新/探索表达式,在regex101.com的右上面板中已经对其进行了解释。如果您感兴趣,可以观看匹配步骤或在this debugger link中修改它们。调试器演示了a RegEx engine如何逐步使用一些示例输入字符串并执行匹配过程
相关问题 更多 >
编程相关推荐