装满y ---- y还有5
y向x装3-----y还有2,x有3
倒掉x,把y里面的2装到x-------y还有0,x有2
装满y ----- y有5,x有2
y向x装1(用y装满x) ----- y有4,x有3
倒掉x ------ y有4,x有 0

没有z的容器

  • 数学上可以证明只要x,y的最大公约数能整除k,就存在一对m,n实现mx + ny = k。 因此问题就转化为寻找x,y的最大公约数是否能整除k。
    辗转相除法
    class Solution {
      public boolean canMeasureWater(int x, int y, int z) {
          if(x+y<z)return false;
          if(z==0)return true;
          if(x<y) {
              int temp = x;
              x= y;
              y = temp;
          }
          if(y==0)
              return x==z;
          while(x%y!=0) {
              int i=x%y;
              x=y;
              y=i;
          }
          return z%y==0;
      }
    }

其他解法没想出来