LeetCode 365.水壶问题

问题描述:

有两个容量分别为 x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水?

如果可以,最后请用以上水壶中的一或两个来盛放取得的 z升 水。

你允许:

  • 装满任意一个水壶
  • 清空任意一个水壶
  • 从一个水壶向另外一个水壶倒水,直到装满或者倒空

第一次做的时候,粗心把题目看错了,将题目理解成了:最后使得一个水壶里面有z升水。

第一次的代码:

class Solution {
public:
	bool canMeasureWater(int x, int y, int z) {
		if (z > x && z > y)
			return false;
		if (x > y)
			swap(x, y);
		if (x == 0)
			if (z == 0 || z == y)
				return true;
			else
				return false;
		for (int temp = 0; y - temp >= 0; temp = temp + x)
			if (temp == z)
				return true;
		for (int temp = y; temp % x != 0; temp = temp - x) {
			if (temp == z)
				return true;
			if (temp < 0) {
				temp = y + temp;
				if (temp == z)
					return true;
			}
		}
		return false;
	}
};

  后面发现题目看错了,就改了一下:

class Solution {
public:
	bool canMeasureWater(int x, int y, int z) {
		if (z > x + y)
			return false;
		if (x > y)
			swap(x, y);
		if (x == 0)
			if (z == 0 || z == y)
				return true;
			else
				return false;
		for (int temp = 0; y - temp >= 0; temp = temp + x)
			if (temp == z || y + temp == z)
				return true;
		for (int temp = y; temp % x != 0; temp = temp - x) {
			if (temp == z || temp + x == z)
				return true;
			if (temp < 0) {
				if (temp + x + y == z)
					return true;
				temp = y + temp;
				if (temp == z || temp + x == z)
					return true;
			}
		}
		return false;
	}
};

  

猜你喜欢

转载自www.cnblogs.com/airfy/p/12539191.html