題目
題目鏈接
有兩個容量分別爲 x升 和 y升 的水壺以及無限多的水。請判斷能否通過使用這兩個水壺,從而可以得到恰好 z升 的水?
如果可以,最後請用以上水壺中的一或兩個來盛放取得的 z升 水
你允許:
裝滿任意一個水壺
清空任意一個水壺
從一個水壺向另外一個水壺倒水,直到裝滿或者倒空
示例 1: (From the famous “Die Hard” example)
輸入: x = 3, y = 5, z = 4
輸出: True
示例 2:
輸入: x = 2, y = 6, z = 5
輸出: False
題解
- z = ax+by的時候返回true,進一步展開爲z爲x和y最大公約數的倍數的時候返回true
- 需要處理特殊情況 當 x+y > z 的時候返回false,因爲這個時候無論怎麼用這兩個杯子也無法恰好得到z升的水(理解題目)比如 x = 1 y = 1,z = 12 返回false
- z == 0 的時候返回true
class Solution {
private:
int getGcd(int x,int y){
if(y == 0){
return x;
}else{
return getGcd(y,x%y);
}
}
public:
bool canMeasureWater(int x, int y, int z) {
if(z == 0){
return true;
}
if(x + y < z){
return false;
}
int maxGcd = getGcd(x,y);
return z % maxGcd == 0;
}
};