365 Water and Jug Problem
Problem:
Input: x = 3, y = 5, z = 4
Output: TrueInput: x = 2, y = 6, z = 5
Output: FalseSolutions:
public class Solution {
public boolean canMeasureWater(int x, int y, int z) {
HashSet<Integer> valid = new HashSet<Integer>();
Collections.addAll(valid, 0, x, y, x + y);
int max = Math.max(x, y);
int sum = x + y;
Queue<Integer> sons = new LinkedList<Integer>();
sons.add(Math.abs(x - y));
while (!sons.isEmpty()) {
int son = sons.poll();
process(max, sum, son + x, valid, sons);
process(max, sum, son + y, valid, sons);
process(max, sum, son - x, valid, sons);
process(max, sum, son - y, valid, sons);
process(max, sum, x - son, valid, sons);
process(max, sum, y - son, valid, sons);
}
return valid.contains(z);
}
private void process(int max, int sum, int num, HashSet<Integer> valid, Queue<Integer> sons) {
if (num <= 0) {
return;
}
if (num > 0 && num < max && !valid.contains(num)) {
valid.add(num);
sons.add(num);
}
else if (num < sum && !valid.contains(num)) {
valid.add(num);
}
}
}Last updated