leetcode-365水壶问题

题目链接

365. 水壶问题 - 力扣(LeetCode)

解题思路

DFS深度优先搜索

我们不妨记jug1Capacity为x,jug2Capacity为y,targetCapacity为z。接下来,我们设计一个函数dfs(i,j),表示当前jug1中有i升水,jug2中有j升水,是否可以得到z升水。

函数dfs(i,j)的执行过程如下:

  • 如果(i,j)已经被访问过,返回false。
  • 如果i = z或者j = z或者 i + j =z,返回true。
  • 如果,我们给jug1倒满水,或者给jug2倒满水,或者将jug1清空,或者将jug2清空,可以得到z升水,返回true。
  • 如果我们将jug1中的水倒入
    class Solution:
        def canMeasureWater(self, x: int, y: int, z: int) -> bool:
            def dfs(i:int,j:int) ->bool:
                if(i, j) in vis:
                    return False
                vis.add((i,j))
                if i == z or j == z or i + j == z:
                    return True
                if dfs(x,j) or dfs(i,y) or dfs(0,j) or dfs(i,0):
                    return True
                a = min(i,y-j)
                b = min(j,x-i)
                return dfs(i-a,j+a) or dfs(i + b, j - b)
            vis = set()
            return dfs(0,0)
            
    jug2,或者将jug2中的水导入jug1,可以得到z升水,返回true

你可能感兴趣的:(leetcode,算法,职场和发展)