有兩個容量分別為 x公升 和 y公升 的水壺以及無限多的水。請判斷能否通過使用這兩個水壺,從而可以得到恰好 z公升 的水?
如果可以,最後請用以上水壺中的一或兩個來盛放取得的 z公升 水。
你允許:
示例 1:
輸入: x = 3, y = 5, z = 4示例 2:輸出: true
輸入: x = 2, y = 6, z = 5答案:輸出: false
public
boolean
canmeasurewater1
(int x,
int y,
int z)
public
intgcd
(int x,
int y)
解析:這題估計大家都遇到過好多次了,即使沒在面試中遇到過,但至少在書上也看到過。這題如果單從**上來看基本上沒什麼難度,難的是對這題的理解,其實這裡面涉及到乙個定理叫裴蜀定理。需要理解他,這題才能看明白。下面再來看一種解法,
public
boolean
canmeasurewater
(int x,
int y,
int z)
setset =
newhashset
<
>()
; queue
q =newlinkedlist
<
>()
; q.
offer(0
);while
(!q.
isempty()
)int down = n + y;
if(down <= x + y && set.
add(down)
)int left = n - x;
if(left >=
0&& set.
add(left)
)int right = n + x;
if(right <= x + y && set.
add(right))if
(set.
contains
(z))
}return
false
;}
以原點0為中心,向他的上下左右4個方向發散,所以最終會滿足乙個方程ax+by=z,並且a,b都是整數,如果x,y,z都不為0的情況下,當且僅當x+y=z的時候,a=b=1,否則如果滿足條件,a和b肯定是乙個為正數乙個為負數,也就是乙個總共裝了幾桶水,乙個總共倒了幾桶水。
Leetcode 365 水壺問題
有兩個容量分別為x公升 和y公升的水壺以及無限多的水。請判斷能否通過使用這兩個水壺,從而可以得到恰好z公升 的水?如果可以,最後請用以上水壺中的一或兩個來盛放取得的z公升 水。你允許 示例1 from the famous die hard example 輸入 x 3,y 5,z 4 輸出 tru...
LeetCode365 水壺問題
有兩個容量分別為 x公升 和 y公升 的水壺以及無限多的水。請判斷能否通過使用這兩個水壺,從而可以得到恰好 z公升 的水?如果可以,最後請用以上水壺中的一或兩個來盛放取得的 z公升 水。你允許 裝滿任意乙個水壺 清空任意乙個水壺 從乙個水壺向另外乙個水壺倒水,直到裝滿或者倒空 示例 1 from t...
LeetCode 365 水壺問題
思路一 裴蜀定理 數學法 由題意,每次操作只會讓桶裡的水總量增加x或y,或者減少x或y,即會給水的總量帶來x或y的變化量,轉為數字描述即為 找到一對整數a,b使得下式成立 ax by z分析知,要完成操作,需要滿足 z x y a,b存在 由裴蜀定理 z是x,y的最大公約數的倍數 ax by z有解...