343,水壺問題

2022-09-18 09:39:19 字數 1567 閱讀 5885

有兩個容量分別為 x公升 和 y公升 的水壺以及無限多的水。請判斷能否通過使用這兩個水壺,從而可以得到恰好 z公升 的水?

如果可以,最後請用以上水壺中的一或兩個來盛放取得的 z公升 水。

你允許:

示例 1:

輸入: x = 3, y = 5, z = 4

輸出: true

示例 2:

輸入: 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有解...