zoukankan      html  css  js  c++  java
  • LeetCode 365. Water and Jug Problem

    365. Water and Jug Problem (水壶问题)

    链接

    https://leetcode-cn.com/problems/water-and-jug-problem/

    题目

    有两个容量分别为 x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水?

    如果可以,最后请用以上水壶中的一或两个来盛放取得的 z升 水。

    你允许:

    装满任意一个水壶
    清空任意一个水壶
    从一个水壶向另外一个水壶倒水,直到装满或者倒空
    示例 1: (From the famous "Die Hard" example)

    输入: x = 3, y = 5, z = 4
    输出: True
    示例 2:

    输入: x = 2, y = 6, z = 5
    输出: False

    思路

    懒得整BFS和DFS,就只能靠数学方法做了。通过裴蜀定理,若xy的最大公约数是z的因子,就代表可以倒出所需的水。

    代码

      public int gcd(int x, int y) {
        if (y == 0) {
          return x;
        }
        int r = x % y;
        return gcd(y, r);
      }
    
      public boolean canMeasureWater(int x, int y, int z) {
        if (x == 0 && y == 0) {
          return z == 0;
        }
        return z == 0 || (z % gcd(x, y) == 0 && x + y >= z);
      }
    
  • 相关阅读:
    CSS学习1
    三个和尚没水喝阅读笔记
    Javascript学习1

    mv 批量
    emacs 大小写转换
    too many open files
    成都定房
    有关重定向
    postgresql 数据库
  • 原文地址:https://www.cnblogs.com/blogxjc/p/12536877.html
Copyright © 2011-2022 走看看