タイトル説明
あなたが能力を持つ2つの水差しを与えられている のxと yの リットル。利用可能な水供給の無限の量があります。あなたはそれを正確に測定することが可能であるかどうかを判断する必要がある zの これら二つの水差しを使っリットル。
場合 Z リットルの水が測定され、あなたが持っている必要があります zの 終わりで、一方または両方のバケツの中に含まれる水のリットル。
許可される操作:
- 完全に水を水差しのいずれかを記入してください。
- 水差しのいずれかを空にします。
- 他の水差しが完全に満杯であるか、または最初の水差し自体が空になるまで別に1つの水差しから水を注ぎます。
効果の対象に
2つのサイズXおよびYはそれぞれリットルケトル、ケトルに水を満たし、無制限、そしてケトル釜中の水は、2つのZまで追加実装することができるかどうか、互いに両者の間注ぐことができます。
例
E1
E2
問題解決のためのアイデア
LeetCodeする@ lblbxuxu2の考え方によると、今回得られた水の総量を表すvで、
V <X、意味のある操作を行うことができるが故に、Yを充填する場合:V + = Y
= xと - V:V>は、X、行うことができセンス動作は、このようにxは、空の場合
満足環式は、V = Zが存在するか否かが判断されます。
複雑性分析
時間複雑:O(N)
宇宙複雑:O(1)
コード
クラス解決{ パブリック: BOOL canMeasureWater(int型のx、int型のy、int型Z){ IF(X == Y + Z) リターン trueに、 IF(X + Y < Z) リターン falseに; // xがyよりも小さい場合、次いで2交換可能なデジタル IF(X < Y){ int型 TMP = X; X = Y; Yは = TMP; } int型の V = 0 。 一方、(1 ){ 場合(V < X) 、V + = Y。 他の V - =のX; もし(V == z)を 返す 真。 もし(Vの== 0 ) を返す 偽。 } } }。