思路:把这个问题抽象一下,其实可以等价变换为:ax+by=c(其中a,b分别为瓶x,y的容量,c为最后所需要的),所以原问题可以转换为:求在ax+by=c这条直线上,是否存在一个点,满足如下条件
ax+by=c 其中,x,y为整数
那接下来的工作就是怎么找的问题了。我们假设a
public class Solution {
public boolean canMeasureWater(int x, int y, int z) {
if(x>y)
return canMeasureWater(y,x,z);
if(z > x+y)
return false;
Set<Integer> failSet = new HashSet<>();
int resX = 0;
int resY = 0;
while(true){
int res = resX * x + resY * y;
if(failSet.contains(res))
return false;
if(res == z){
return true;
}else if(res < z){
resY++;
}else{
resX--;
}
failSet.add(res);
}
}
}