| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 | 
							- package _365;
 
- import java.util.HashSet;
 
- /**
 
-  * Error: StackOverFlow!!!
 
-  */
 
- class OldSolution {
 
-     public boolean canMeasureWater(int x, int y, int z) {
 
-         HashSet<String> set = new HashSet<>();
 
-         return canMeasureWaterIter(x, y, z, 0, 0, set);
 
-     }
 
-     /**
 
-      * @param _x  The water in bottle x
 
-      * @param _y  The water in bottle y
 
-      * @param set The set of old states
 
-      */
 
-     private boolean canMeasureWaterIter(int x, int y, int z, int _x, int _y, HashSet<String> set) {
 
-         boolean isDone = _x == z || _y == z || (_x + _y) == z;
 
-         if (isDone)
 
-             return true;
 
-         boolean isTried = set.contains(_x + ":" + _y);
 
-         if (isTried)
 
-             return false;
 
-         set.add(_x + ":" + _y);
 
-         int _x_x2y, _y_x2y, _x_y2x, _y_y2x;
 
-         int sum_xy = _x + _y;
 
-         if (sum_xy > x) {
 
-             _x_x2y = x;
 
-             _y_x2y = sum_xy - x;
 
-         } else {
 
-             _x_x2y = sum_xy;
 
-             _y_x2y = 0;
 
-         }
 
-         if (sum_xy > y) {
 
-             _y_y2x = y;
 
-             _x_y2x = sum_xy - y;
 
-         } else {
 
-             _y_y2x = sum_xy;
 
-             _x_y2x = 0;
 
-         }
 
-         return canMeasureWaterIter(x, y, z, x, _y, set) || canMeasureWaterIter(x, y, z, _x, y, set)
 
-                 || canMeasureWaterIter(x, y, z, 0, _y, set) || canMeasureWaterIter(x, y, z, _x, 0, set)
 
-                 || canMeasureWaterIter(x, y, z, _x_x2y, _y_x2y, set) || canMeasureWaterIter(x, y, z, _x_y2x, _y_y2x, set);
 
-     }
 
-     private static void testCanMeasureWater(int x, int y, int z) {
 
-         OldSolution solution = new OldSolution();
 
-         System.out.println(solution.canMeasureWater(x, y, z));
 
-     }
 
-     public static void main(String[] args) {
 
-         testCanMeasureWater(3, 5, 4);
 
-         testCanMeasureWater(2, 6, 5);
 
-     }
 
- }
 
 
  |