LeetCode 365 水壺問題

題目

題目鏈接
有兩個容量分別爲 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;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章