装满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; } }
其他解法没想出来