当前位置:   article > 正文

初等数论,LeetCode 365. 水壶问题

初等数论,LeetCode 365. 水壶问题

一、题目

1、题目描述

有两个水壶,容量分别为 jug1Capacity 和 jug2Capacity 升。水的供应是无限的。确定是否有可能使用这两个壶准确得到 targetCapacity 升。

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

你可以:

  • 装满任意一个水壶
  • 清空任意一个水壶
  • 从一个水壶向另外一个水壶倒水,直到装满或者倒空

2、接口描述

  1. class Solution {
  2. public:
  3. bool canMeasureWater(int jug1Capacity, int jug2Capacity, int targetCapacity) {
  4. }
  5. };

3、原题链接

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


二、解题报告

1、思路分析

由于每次倒出都是整壶的倒,倒入一定倒满则可以等效为直接倒了一壶
所以最终水量一定为sx+ty
根据初等数论的内容可以知道x,y最大公因数d可以表示为sx+ty=d并且d是能被这样表示的最小正整数,那么sx+ty=z成立当仅当z整除x和y最大公因数

2、复杂度

时间复杂度: O(1) 空间复杂度:O(1)

3、代码详解

  1. class Solution {
  2. public:
  3. bool canMeasureWater(int x, int y, int z) {
  4. if (x + y < z)
  5. return false;
  6. if (x == 0 || y == 0)
  7. return z == 0 || x + y == z;
  8. return z % gcd(x, y) == 0;
  9. }
  10. };

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/42640?site
推荐阅读
相关标签
  

闽ICP备14008679号