
链接: 365. 水壶问题
水壶倒水问题非常经典,这里用BFS解决复杂度较高,实际上可以用裴蜀定理,直接一个GCD最大公倍数的复杂度就可以搞定,在此不展开。
最坏时间复杂度O(x×y)
BFS。
class Solution:
def canMeasureWater(self, jug1Capacity: int, jug2Capacity: int, targetCapacity: int) -> bool:
vis = {(0,0)}
q = deque(vis)
while q:
a,b = q.popleft()
if a+b == targetCapacity:
return True
for c,d in (0,b),(a,0),(jug1Capacity,b),(a,jug2Capacity):
if (c,d) not in vis:
vis.add((c,d))
q.append((c,d))
diff = min(jug2Capacity-b,a)
c,d = a-diff,b+diff
if (c,d) not in vis:
vis.add((c,d))
q.append((c,d))
diff = min(jug1Capacity-a,b)
c,d = a+diff,b-diff
if (c,d) not in vis:
vis.add((c,d))
q.append((c,d))
return False